【SICP练习】64 练习2.35
来源:互联网 发布:吊顶面积算法 编辑:程序博客网 时间:2024/06/05 04:15
练习2.35
这道题中已经给定了accumulate和map,根据accumulate的参数可以很容易的知道题目中的2处需要我们补充的:(accumulate + 0 (map ...... 因为我们是要累加所有的树叶,这里就需要在map里有一个lambda来讲t中的树叶全部遍历出来,map的第二个参数自然就是t了。
而遍历t的过程中,遇到的节点有可能只是一片树叶,但也有可能是有两个分支。而如果是分支的话,我们又可以让其用count-leaves递归回来。至于判断是树叶还是分支,我们在前面已经遇到过许多次这种问题,用谓词pair?即可。
(define (count-leaves t)
(accumulate + 0 (map (lambda (sub-t)
(if (pair? sub-t)
(count-leavessub-t)
1))
t)))
这个过程比起前面几道题就稍微有点宏伟了,来测试一下吧。
(count-leaves ‘(1 2 (3 (4 ( ( (5 ) 6)(7) ( (8 ) 9) 10) ) ) 11) )
;Value: 11
0 0
- 【SICP练习】64 练习2.35
- 【SICP练习】2 练习1.6
- 【SICP练习】3 练习1.7
- 【SICP练习】4 练习1.8
- 【SICP练习】5 练习1.9
- 【SICP练习】6 练习1.10
- 【SICP练习】7 练习1.11
- 【SICP练习】8 练习1.12
- 【SICP练习】9 练习1.15
- 【SICP练习】10 练习1.16
- 【SICP练习】11 练习1.17
- 【SICP练习】12 练习1.18
- 【SICP练习】13 练习1.19
- 【SICP练习】14 练习1.20
- 【SICP练习】15 练习1.21
- 【SICP练习】16 练习1.22
- 【SICP练习】17 练习1.23
- 【SICP练习】18 练习1.24
- 【SICP练习】62 练习2.33
- STL for_each
- 【SICP练习】63 练习2.34
- 动态规划学习系列——划分DP(三)
- 【线性回归】为何线性回归误差要服从高斯分布?
- 【SICP练习】64 练习2.35
- 【SICP练习】65 练习2.36
- 【SICP练习】66 练习2.37
- 【SICP练习】67 练习2.38
- 【SICP练习】68 练习2.39
- rails中select不能响应多选的解决办法
- 【SICP练习】69 练习2.40
- 【SICP练习】70 练习2.41
- fhq Treap模板