使用 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
选择第二个。
我似乎无法解释 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
选择第二个。