写代码的时候遇到一个奇葩的问题,
(if (null? s)
'()
...)
开始我是这样写的,然后发现这样写了之后,map不认账,map rest的时候直接不处理空列表,然后就返回一个()了。
(define (subsets s)
(if (not (null? s)) (display (car s)))
(if (null? s)
'(nil)
(let ((rest (subsets (cdr s))))
(append rest (map (lambda (x) (cons (car s) x)) rest)))))
(subsets (list 1 2 3))