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

发布于 2024-10-16 15:29:21 字数 280 浏览 4 评论 0原文

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

 (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨洒年华 2024-10-23 15:29:21

变量pq是“cons cell”的两个元素;即,它们是cons. 中的xy。如果运行 (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 and q are the two elements of the "cons cell"; i.e., they are the x and y in cons.. If you run (car. (cons. 1 2)), you get (expanding cons.):

(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."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文