我似乎无法解释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)))
我理解第一个过程返回一个过程,该过程将过程作为参数,并将此过程应用于两个参数x y。我不明白的是汽车和司机的工作原理:
(p-car (p-cons "foo" "bar")) -> foo
(p-cdr (p-cons "foo "bar")) -> bar
如果有人可以解释这是如何工作的,我将不胜感激! lambda-expression如何在' car'和' cdr'得到' p'和' q'变量例如?
答案 0 :(得分:1)
做一个替换:
(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
第二个。