2.30
(define (square-tree tree)
(cond ((null? tree) '())
((pair? tree) (cons (square-tree (car tree))
(square-tree (cdr tree))))
(else (* tree tree))))
(define (map-square-tree tree)
(map (lambda (sub-tree)
(if (pair? sub-tree)
(map-square-tree sub-tree)
(* sub-tree sub-tree)))
tree))
2.31
(define (tree-map f tree)
(map (lambda (sub-tree)
(if (pair? sub-tree)
(tree-map f sub-tree)
(f sub-tree)))
tree))
2.32
这道题的解题方法步骤是猜想、验证、解释。
猜想:以(subsets (list 3))代入,得出两个答案
(lambda (x) (append s x))
(lambda (x) (cons (car s) x))
验证:以(subset (list 1 2 3))代入进行验证,得出猜想的第二个答案是正确的
解释:得出正确答案后,以自然语言的方式解释subsets的执行过程。subsets的执行过程是:
1.生成空集
2.将第一个元素加入到由1生成的空集中
3.将1、2作为两个元素生成一个集合
4.将新元素加入上一步生成的集合的所有子集中生成新的子集,并与加入之前的子集生成新的一个集合
5.重复4直到所有的元素都已加入。
来源:oschina
链接:https://my.oschina.net/u/1445655/blog/729125