【SICP练习】37 练习1.42
来源:互联网 发布:js replaceall 编辑:程序博客网 时间:2024/05/19 17:50
练习1.42
这道题让我彻底爱上了lambda。
复合这一概念早在数学中便已经学过了,我们先来根据题目的意思写出能够平方和能够加一这两个过程。可能是因为我看书不认真吧,写了很多次才完成这两个过程。
一开始我都是以(define (inc f)......)来开始的,但是每次都没有返回结果。终于醒悟了,过程嘛,就是像前面第41最下面所讲的一种关联那样,我们是要将一个lambda表达式关联到一个名字上面,这个名字于是就变成了过程名。而且过程本身也根本不需要传入参数,这又不是函数。
(define inc
(lambda (x)
(+ x 1)))
(define square
(lambda (x)
(* x x)))
基于同样的思想,我们是要将这两个过程关联到compose上。并且compose本身也是作为一个过程而不是函数。于是我又做了种种尝试。
(define compose
(lambda (f1 f2)
(f1 (f2))))
这里体现了复合的意思,但却没有真正返回点什么。看着题目中的表达式,让我明白了compose是一个要传入2个过程,并且返回一个过程的过程。而这里的次序不能颠倒了,是要先传入而后返回。因此定义如下:
(define compose
(lambda (f1 f2)
(lambda (x)
(f1 (f2 x)))))
在第一个lambda之后的就是返回的过程了。下面再来测试一下。
((compose square inc) 9)
;Value: 100
5 0
- 【SICP练习】37 练习1.42
- 【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练习】35 练习1.40
- 【SICP练习】36 练习1.41
- 问答中关于C语言中共同体(联合体)的问题
- HDU 1250 Hat's Fibonacci (+=)
- HDU 1248 寒冰王座
- 【SICP练习】37 练习1.42
- PCB设计中路的反射和场的反射
- 【SICP练习】38 练习1.43
- 接地电阻测试方法
- 【SICP练习】39 练习1.44
- 【SICP练习】40 练习1.45
- 【SICP练习】41 练习1.46
- 关于excel 中IF 语句的多重嵌套
- 【SICP练习】42 练习2.1