(define (all-sublists buffer n)
(cond ((= n 0) n)
((all-sublists (append buffer (list (list n)) (map (lambda (x) (append (list n) x)) buffer)) (- n 1)))))
结果如下:
(all-sublists '((3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)) 0)
当n周围只有一个列表时:
(define (all-sublists buffer n)
(cond ((= n 0) n)
((all-sublists (append buffer (list n) (map (lambda (x) (append (list n) x)) buffer)) (- n 1)))))
结果得到一个虚线对:
(all-sublists '(3 2 (2 . 3) 1 (1 . 3) (1 . 2) (1 2 . 3)) 0)
答案 0 :(得分:1)
不是你有"用列表两次包围n以获得正确的结果",事实是你的代码有几个问题,对于初学者:{{1的最后一个条件应该以{{1}}开头,并且您错误地使用cond
。如果我理解正确,你只需要列表的powerset:
else
像这样:
append