2011-02-08 79 views
6

我的问题涉及到下面的代码此实现利弊和车方案:帮助理解使用lambda表达式

(define (cons. x y) 
    (lambda (m) (m x y))) 

(define (car. z) 
    (z (lambda (p q) p))) 

我的问题是这段代码是如何工作。据我所知,利弊。正在返回一个包含变量x和y的过程。汽车。然后从缺点取回程序。并将其应用于另一个带有两个参数p和q并返回p的lambda。我的困惑在于第二个lambda,P和Q的值究竟是从哪里来的?

回答

7

变量pq是“cons cell”的两个元素;即它们是cons.中的xy。如果您运行(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,这是“cons cell”的第一个元素。

+0

谢谢耶利米,我现在明白它是如何工作的。 – 4tlulz 2011-02-08 05:17:47