【Scheme】cons的过程性实现

(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。

原文地址:https://www.cnblogs.com/cknightx/p/6795490.html