使用 lambda 定义 cons、car 和 cdr - 它是如何工作的?

Defining cons, car and cdr with lambda - how does it work?

我似乎无法解释 cons、car 和 cdr 的定义是如何工作的:

(define (p-cons x y)
   (lambda (proc) (proc x y)))

(define (p-car proc)
   (proc (lambda (p q) p)))

(define (p-cdr proc)
   (proc (lambda (p q) q)))

我理解第一个过程 returns 一个以过程作为参数的过程,并将该过程应用于两个参数 x y。我不明白的是 car 和 cdr 是如何工作的:

(p-car (p-cons "foo" "bar")) -> foo
(p-cdr (p-cons "foo "bar")) -> bar

如果有人能解释这是如何工作的,我将不胜感激!例如,'car' 和 'cdr' 中的 lambda 表达式如何获取 'p' 和 'q' 变量?

只是做一个替换:

(p-car (p-cons "foo" "bar"))

;substituting p-cons:
(p-car (lambda (proc) (proc "foo" "bar")))

;substituting p-car:
((lambda (proc) (proc "foo" "bar")) (lambda (p q) p))

((lambda (p q) p) "foo" "bar")

"foo"

p-cdr.

也类似

本质上 p-cons 只是创建了一个 lambda,它需要一个过程来选择适当的存储值。 p-car 选择第一个,p-cdr 选择第二个。