我是Racket编程的新手,我正在研究一个问题,我给出了一个数字列表,我必须列出不同数字组合的列表。
类似的东西:
(combine (list 3 1 2)) => (list
(list 31 32 33)
(list 21 22 3)
(list 11 12 13))
如何在Racket中实现这一目标? 谢谢
答案 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))