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 不是过程。

results matching ""

    No results matching ""