您的位置:首页 > 其它

SICP 习题 (2.31)解题总结 : 通用的Square-Tree

2016-07-16 21:50 218 查看
SICP  习题 2.31 秉承该书一直以来的抽象作风,要求读者对习题2.30的结果进行抽象,使square-tree这种形式的过程更加通用。
习题2.30中的square-tree只能对树状列表求平方,不能执行其他操作,但是我们可以发现其实使用map遍历树状列表的操作是通用的,只要我们将square换成其他过程就可以执行其他操作了。
而Lisp里强大的将过程当做数据的功能可以帮助我们把square换成一个变量,由传入的参数来决定这个变量是什么。
我们可以定义一个tree-map过程,接收两个参数,一个是需要执行的操作,一个是作为操作目标的树状列表。代码如下:(define (tree-map method tree)
(map (lambda (i)
(if (list? i)
(tree-map method i)
(method i))) tree))

这样就可以通过传入不同的method决定对列表执行什么操作了。
然后用下面的过程包装一下就可以继续完成square-tree的工作:
(define (new-square-tree input-list)
(tree-map square input-list))

(define (square x)
(* x x))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: