sicp每日一题[2.32]
上一道题没什么改动,再来一道
Exercise 2.32
We can represent a set as a list of distinct elements, and we can represent the set of all subsets of the set as a list of lists. For example, if the set is (1 2 3), then the set of all subsets is (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)). Complete the following definition of a procedure that generates the set of subsets of a set and give a clear explanation of why it works:
(define (subsets s)
(if (null? s)
(list nil)
(let ((rest (subsets (cdr s))))
(append rest (map <??> rest)))))
这道题有一定难度,要注意到题目里面缺少对
(car s)的处理,我们每次求(cdr s)的子集后要跟(car s)拼一下。
(define (subsets s)
(if (null? s)
(list nil)
(let ((rest (subsets (cdr s))))
(append rest (map (lambda (x) (cons (car s) x)) rest)))))
(subsets (list 1 2 3))
; 执行结果
'(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))

浙公网安备 33010602011771号