在Racket

时间:2017-10-06 20:53:10

标签: scheme racket

我是Racket编程的新手,我正在研究一个问题,我给出了一个数字列表,我必须列出不同数字组合的列表。

类似的东西:

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

如何在Racket中实现这一目标? 谢谢

1 个答案:

答案 0 :(得分: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))