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

时间:2011-02-08 04:36:15

标签: lambda scheme sicp

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

 (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的值究竟来自哪个?

1 个答案:

答案 0 :(得分:7)

变量pq是“缺点单元格”的两个元素;即,它们是x中的ycons.。如果您运行(car. (cons. 1 2)),则会获得(展开cons.):

(car. (lambda (m) (m 1 2))

变成(使用car.的定义):

((lambda (m) (m 1 2)) (lambda (p q) p))

将参数插入第一个lambda的正文中,您得到:

((lambda (p q) p) 1 2)

这样的另一个替换会给你1,这是“利弊细胞”的第一个元素。