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被当做运算符了。
。
。。。