(define (cons x y)
(define (dispatch m)
(cond ((= m 0) x)
((= m 1) y)))
dispatch)
(define (car z) (z 0))
(define (cdr z) (z 1))
(cons x y)实际返回的是一个过程,即内部定义的dispatch,它接收一个参数0或1分别返回x和y。因此,如果z是由(cons x y)产生的过程,(z 0)相当于把0传递给dispatch,就会得到x。(z 1)同理得到y。
(define (cons x y)
(lambda (m) (m x y)))
(define (car x)
(x (lambda (m n) m )))
(define (cdr x)
(x (lambda (m n) n )))
(cons x y)返回一个lambda函数,此函数接收一个过程,并作用于x,y上。那么car和cdr的实现就应该是实现一个过程,该过程接收2个参数,并分别返回第一个和第二个参数。
以car为例,(lambda (m n) m)该函数将两个参数中的第一个返回,
再将其传递给x,相当于调用了((lambda (m n) m ) x y),自然返回了x。