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

。。。

05-11 08:44