方案子集递归问题
对于幂函数:
(define (p l)
(define (n next)
(if (null? next)
'()
(cons (car next)
(cons (cons (car l) (car next))
(n (cdr next))))))
(if (null? l)
'(())
(n (p (cdr l)))))
我想按元素数量的递增顺序打印所有集合,并且仅使用 R5RS按排序顺序打印相同的大小。例如,
如果我定义这样的列表
(define list3 (list '1 '2 '3))
并调用该函数,
(p'(1 2 3))
我的输出是
(() (1) (2) (1 2) (3) (1 3) (2 3) (1 2 3))
但我想打印出来:
(() (1) (2) (3) (1 2) (1 3) (2 3) (1 2 3))
此外,对于
(p'(1 2 3 4))
我的输出是:
(()
(1)
(2)
(1 2)
(3)
(1 3)
(2 3)
(1 2 3)
(4)
(1 4)
(2 4)
(1 2 4)
(3 4)
(1 3 4)
(2 3 4)
(1 2 3 4))
但我想要
(()
(1)
(2)
(3)
(4)
(1 2)
(1 3)
(1 4)
(2 3)
(2 4)
(3 4)
(1 2 3)
(1 2 4)
(1 3 4)
(2 3 4)
(1 2 3 4))
我怎样才能做出正确的输出?