2013-02-18 19 views
0

我正在學習函數式編程和lambda微積分,但是我想知道 如果閉合項也出現在教會的原作中,或者它是一個更嚴格的語言的現代 術語。函數式編程和閉包術語誕生

我記得在教會的工作中有一些術語:自由變量,關閉到..., 等等。

回答

1

考慮方案如下函數定義:

(define (adder a) 
    (lambda (x) (+ a x))) 

明確關閉的概念是不是在純演算必需的,因爲變量替換照顧它。當應用了此的值z上面的代碼片段可被翻譯

λa λx . (a + x) 

,它由β-還原,它涉及取代變得

λx . (z + x) 

。如果需要,您可以通過a調用此閉包。

(本例使用函數參數,但是這適用於任何變量綁定如此,因爲在純演算的所有變量綁定必須通過λ條件發生。)

+0

所以在教會的工作lambda表達式「是封閉「在其自由變量上,但封閉術語在該作品中沒有明確說明! – xdevel2000 2013-02-18 10:13:26

+0

@ xdevel2000事實上,不是通過它的自由變量,而是通過λ抽象的約束。類似地,在Scheme這樣的編程語言中,閉包不會在自由變量上發生:在'(define(adder x)(+ ax))'其中'a'尚未定義之後''(define a 2)'改變'加法器'的行爲。當然,並非所有的編程語言都允許這樣做。 – 2013-02-18 10:23:32

3

它是一種更現代的術語,由於(如在現代FP很多東西),PJ Landin(1964),The mechanical evaluation of expressions

此外,我們通過一個 束表示λ-表達式的值稱爲「封閉」的信息,其包括 λ表達和相對於其被評估的環境 。