【SICP练习】62 练习2.33
来源:互联网 发布:吊顶面积算法 编辑:程序博客网 时间:2024/06/15 08:01
练习2.33
既然要用到accumulate,那么我们先来回顾一下这个函数好了。其有三个参数,一个操作符,一个用来作为初始化的值,一个是需要运算的序列。题目中的map已有的定义如下:
(define (map p sequence)
(accumulate (lambda (x y) <??>)
nil
sequence))
这里的nil也是’(),其作为accumulate的参数initial。后面的sequence也就是accumulate的参数sequence。那么lambda表达式里要做的就是处理这些东西了。我们用map的参数来处理初始值,然后将其用cons组合。而很明显的,nil对应于x,seguence对应于y。于是乎。
(define (map p sequence)
(accumulate (lambda (x y)
(cons(p x) y))
nil
sequence))
虽然不太规范,但意思就是这么个意思。
下面的append就比较简单了,往前翻到第68页最下面有其的定义,但不看也知道,就是将两个表组合到一起嘛。而题中已经有了cons,那不就有了么。
(define (append seq1 seq2)
(accumulate cons <??> <??>))
同样在第68页也有length的定义。其实这三个小题的难点以及出题的目的都是在于accumulate。通过不断的将sequence不断的car,并且累计计数加1就可以得出length了。
(define (length sequence)
(accumulate (lambda (x y) (+ 1 y))
0
sequence))
如果有兴趣可以直接再写写append和length的展开式之类的。
- 【SICP练习】62 练习2.33
- 【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
- ReactOS SYSCALL_PROLOG/TRAP_EPILOG及相关代码注释 (2) --ZwContinue
- 【SICP练习】60 练习2.30
- 【SICP练习】61 练习2.31-2.32
- 抓住那只喵(HTML5-神经猫)
- BZOJ1406 密码箱
- 【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