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

4tl*_*ulz 6 lambda scheme sicp

我的问题涉及以下代码:

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

 (define (car. z)
   (z (lambda (p q) p)))
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*ock 7

变量pq是"cons单元"的两个元件; 也就是说,他们是xycons..如果你跑(car. (cons. 1 2)),你得到(扩展cons.):

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

变成(使用定义car.):

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

将参数插入第一个体中lambda,您得到:

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

像这样的另一个替代品1,是"利弊细胞"的第一个元素.