乐正

Actions speak louder than words.

Sicp-ex1-34

问题

假定我们定义了:

1
2
(define (f g)
  (g 2))

而后就有:

1
2
3
4
5
(f square)
4

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

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

解答

先在解释器中执行(f f)

1
2
(f f)
;The object 2 is not applicable.

分析其原因,将调用过程展开:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(f f)

;;; =

(f (lambda (g) (g 2)))

;;; =

((lambda (g)
    (g 2))
  (lambda (g)
    (g 2)))

;;; =

((lambda (g)
    (g 2)
  2))

;;; =

(2 2)

因为2不是一个过程,所以无法被调用。

draft

« sicp-ex1-33 sicp-ex1-35 »

Comments