2017-10-06 88 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