SICP 习题 (1.34)解题总结

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

。。。


猜你喜欢

转载自www.cnblogs.com/mqxnongmin/p/10702392.html