用lambda定义缺点,汽车和cdr - 它是如何工作的?

时间:2015-05-29 12:11:07

标签: lambda scheme sicp r5rs

我似乎无法解释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'变量例如?

1 个答案:

答案 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第二个。