1.34
练习 1.34 假定我们定义了:
(define (f g)
(g 2))
而后就有:
(define (square x) (* x x))
(f square)
4
(f (lambda (z) (* z (+ z 1))))
6
如果我们(坚持)要求解释器去求值 (f f)
,那会发生什么情况呢?请给出解释。
先测试一下:
(f f)
可见,这样会抛出错误,说 2 不是一个过程。
原因是f的定义在说:
(lambda (g) (g 2))
↑ ↑ ↑ ↑
f 过程 以g为参数 将g当作过程执行 使用 2 作为参数
于是:
(f f)
↑
以f为参数
(f 2)
↑ ↑
将 f 当作过程执行 使用 2 作为参数
(2 2)
↑ ↑
将 2 当作过程执行 使用 2 作为参数
所以这时会抛出错误说 2 不是过程。