Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我的问题与以下代码有关:
(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 的值究竟来自哪里?
变量p和q是“cons cell”的两个元素;即,它们是xand yin cons.。如果你运行(car. (cons. 1 2)),你会得到(扩展cons.):
p
q
x
y
cons.
(car. (cons. 1 2))
(car. (lambda (m) (m 1 2))
变成(使用 的定义car.):
car.
((lambda (m) (m 1 2)) (lambda (p q) p))
将参数插入 first 的主体lambda,您会得到:
lambda
((lambda (p q) p) 1 2)
另一个这样的替换给你1,“cons cell”的第一个元素。
1