1.34

练习 1.34 假定我们定义了:

 
(define (f g)
  (g 2))
x
 
#<undef>

而后就有:

 
(define (square x) (* x x))
(f square)
 
4

4

 
(f (lambda (z) (* z (+ z 1))))
 
6

6

如果我们(坚持)要求解释器去求值 (f f),那会发生什么情况呢?请给出解释。

先测试一下:

 
(f f)
 
Error: 2 is not a function [f, (anon), (anon)]true

可见,这样会抛出错误,说 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 ""