6

我的问题与以下代码有关:

 (define (cons. x y)
   (lambda (m) (m x y)))

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

我的问题是这段代码实际上是如何工作的。据我所知,缺点。正在返回一个在其范围内包含变量 x 和 y 的过程。车。然后从 cons 中获取返回的过程。并将其应用于另一个接受两个参数 p 和 q 并返回 p 的 lambda。我的困惑在于第二个 lambda,P 和 Q 的值究竟来自哪里?

4

1 回答 1

7

变量pq是“cons cell”的两个元素;即,它们是xand yin cons.。如果你运行(car. (cons. 1 2)),你会得到(扩展cons.):

(car. (lambda (m) (m 1 2))

变成(使用 的定义car.):

((lambda (m) (m 1 2)) (lambda (p q) p))

将参数插入 first 的主体lambda,您会得到:

((lambda (p q) p) 1 2)

另一个这样的替换给你1,“cons cell”的第一个元素。

于 2011-02-08T04:48:36.827 回答