乐正

Actions speak louder than words.

Sicp-ex2-4

问题

下面是序对的另一种过程性表示方式。请针对这一表示验证,对于任意的x和y,(car (cons x y)) 都将产生出x。

1
2
3
4
5
(define (cons x y)
  (lambda (m) (m x y)))

(define (car z)
  (z (lambda (p q) p)))

对应的cdr该如何定义?(提示:为了验证这一表示确实能行,请利用1.1.5节的代换模型)

解答

对应的cdr定义如下:

1
2
(define (cdr z)
  (z (lambda (p q) q)))

为了验证这一表示,将练习2.1中的conscar换成上面表示。验证结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(define x (make-rat 8 3))
;Value: x

(numer x)
;Value: 8

(denom x)
;Value: 3


(define y (make-rat -13 3))
;Value: y

(numer y)
;Value: -13

(denom y)
;Value: 3

可以看到,这一表示是可行的。

draft

« sicp-ex2-3 sicp-ex2-5 »

Comments