使用lambdas帮助理解cons和car-in方案的实现

使用lambdas帮助理解cons和car-in方案的实现,lambda,scheme,sicp,Lambda,Scheme,Sicp,我的问题涉及以下准则: (define (cons. x y) (lambda (m) (m x y))) (define (car. z) (z (lambda (p q) p))) 我的问题是这段代码实际上是如何工作的。据我所知。正在返回一个过程,该过程包含其范围内的变量x和y。汽车然后从cons获取返回的过程。并将其应用于另一个lambda,它接受两个参数p和q并返回p。我的困惑在于第二个lambda,P和Q的值到底从哪里来?变量P和Q是“cons单元格”的两个元素;i

我的问题涉及以下准则:

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

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

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

变量

P
Q
是“cons单元格”的两个元素;i、 例如,它们是
cons.
中的
x
y
。如果您运行
(car.(cons.12))
,您将得到(扩展
cons.
):

(汽车(lambda(m)(m12))

它变成(使用
汽车的定义。
):

((lambda(m)(m12))(lambda(pq)p))

将参数插入第一个
lambda
的主体中,可以得到:

((lambda(pq)p)12)

另一个类似的替换为“cons单元格”的第一个元素
1