帮助理解使用 lambdas 的方案中 cons 和 car 的实现
我的问题与以下代码有关:
(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 的值到底来自哪里?
My question relates to the following code:
(define (cons. x y)
(lambda (m) (m x y)))
(define (car. z)
(z (lambda (p q) p)))
My problem is with how this code actually works. As far as I can understand cons. is returning a procedure containing the variables x and y within its scope. car. then takes the returned procedure from cons. and applies it to another lambda that takes two arguments p and q and returns p. My confusion lies within that second lambda, where exactly do the values of P and Q come from?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
变量
p
和q
是“cons cell”的两个元素;即,它们是cons.
中的x
和y
。如果运行(car.(cons. 1 2))
,您将得到(扩展cons.
):(car.(lambda (m) (m 1 2))
变成(使用
car.
的定义):((lambda (m) (m 1 2)) (lambda (pq) p))< /code>
将参数插入第一个
lambda
的主体中,您将得到:((lambda (pq) p) 1 2)
另一种类似的替换可以得到
((lambda (pq) p) 1 2)
>1,“cons cell”的第一个元素。The variables
p
andq
are the two elements of the "cons cell"; i.e., they are thex
andy
incons.
. If you run(car. (cons. 1 2))
, you get (expandingcons.
):(car. (lambda (m) (m 1 2))
which turns into (using the definition of
car.
):((lambda (m) (m 1 2)) (lambda (p q) p))
Plugging the argument into the body of the first
lambda
, you get:((lambda (p q) p) 1 2)
Another substitution like that gives you
1
, the first element of the "cons cell."