2017-10-06 94 views
0

我是球拍編程的新手,我正在處理一個給出數字列表的問題,我必須列出不同數字組合的列表。在球拍中創建列表

喜歡的東西:

(combine (list 3 1 2)) => (list 
          (list 31 32 33) 
          (list 21 22 3) 
          (list 11 12 13)) 

如何在球拍實現這一目標? 謝謝

+0

我覺得有一個錯字在預期的輸出中,它應該是'(list 21 22 23)' –

回答

0

只需與iterators and comprehension一起玩來實現一個返回列表清單以及一些算術運算以獲得正確結果的笛卡爾積。試試這個:

(for/list ((i '(3 2 1))) 
    (for/list ((j '(1 2 3))) 
    (+ (* 10 i) j))) 

或者,使用更多的標準結構(在學生語言):

(map (lambda (i) 
     (map (lambda (j) 
       (+ (* 10 i) j)) 
      '(1 2 3))) 
    '(3 2 1)) 

無論哪種方式,它按預期工作:

=> '((31 32 33) (21 22 23) (11 12 13)) 
+0

我只能使用中級學生語言。那麼迭代器是否允許在ISL中使用? – Deesha

+0

@Derik我不這麼認爲,我用更簡單的替代方法更新了我的答案 –

+0

@Derik我會說你正在寫哪一種語言是包含在問題中的重要信息。認爲標籤「racket」意味着你有'#lang racket',而'scheme'標籤可能表明你正在拍球並用'#!r6rs'寫入。 – Sylwester