2011-02-08 74 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