2.31
练习 2.31 将你在练习2.30做出的解答进一步抽象,做出一个过程,使它的性质保证能以下面形式定义square-tree:
(define (square-tree tree) (tree-map square tree))
这相当于是2.30再来一个第三种定义square-tree的方式。仔细观察2.30练习的第二种实现方式,其实已经很接近了本题的要求,只是将 square 的过程硬绑定到了 map tree 的过程中,只需要将这个 square 过程抽象出来,变成一个参数,即可:
(define (square x) (* x x))
(define (tree-map proc tree)
(if
(pair? tree)
(cons (tree-map proc (car tree)) (tree-map proc (cdr tree)))
(if (null? tree)
'()
(proc tree)
)
)
)
(define (square-tree tree) (tree-map square tree))
(square-tree
(list 1
(list 2
(list 3 4) 5)
(list 6 7)))