SICP 习题 1.34的题目比较特别一点,对于没有接触过高阶函数的同学们来说是个很好的学习机会。
题目是这样的,如果我们定义下面的过程:
(define (f g)
(g 2))
那么就有:
(f square) => 4
因为有(f square) => (square 2) => 4
还有
(f (lambda (z) (* z (+ z 1)))) => 6
因为有
(f (lambda (z) (* z (+ z 1))))
=> ((lambda (z) (* z (+ z 1))) 2)
=> (* 2 (+ 2 1))
=> (* 2 3)
=> 6
那么,(f f)的结果会是什么样的呢?这就是题目要求我们回答的问题。
如果对高阶函数有准确的理解,做起来不算太难,可以一步一步推导:
(f f)
=> (f 2)
=> (2 2)
=>报错,因为2被当做运算符了。。。。。
SICP 习题 (1.34)解题总结,布布扣,bubuko.com
原文:http://blog.csdn.net/keyboardota/article/details/19261513