2017-01-24 84 views
4

我帶來了Haskell book並與beta減少鬥爭。使用beta減少

我理解這個概念,但不知道,如何使用它,當我有一個拉姆達在我面前。 例如:

(λ a b c . c b a) z z (λ w v . w) 

如何減少?

+0

您購買了哪款Haskell書?請註明... –

+0

最好的一個http://haskellbook.com/ –

回答

9

首先:

(λ a b c . c b a) z z (λ w v . w)

是短期的:

(λ a . (λ b . (λ c . c b a))) z z (λ w . (λ v . w))

好給你申請的β-減少上:

a b c . c b a) z z (λ w v . w)

(黑體字添加了 「活性」變量可以這麼說,斜體替換)

你因此與oparand取代az所以,現在的結果是:

(λ b c . c b z) z (λ w v . w)

所以我們在lambda表達式的範圍取代a通過z,接下來我們執行額外的減少:

b c . c b z) z (λ w v . w)

到:

(λ c . c z z) (λ w v . w)

現在你也可以使用β受體減少到入功能如這裏演示:

c . c z z) (λ w v . w)

分爲:

((λ w v . w) z z)

因此,我們還未結束。因爲再沒有在頭一個lambda表達式:

w v . w) z z

到:

(λ v . z) z

終於本書表明,在頭一個變量不需要在體內的變量,所以最後的β-減少對身體沒有影響(但它消除了最後λ-表達):

v . z) z

成:

(z)

或:

z 

測試版減少是多了還是少了什麼是每個函數式編程語言背後:哈斯克爾重複調用的β減少 - 如果需要的話,因爲它是懶惰 - 直到結果值的。

+0

任何好資源來了解更多關於減少? –

+0

@zero_coding:不知道立即:我在*自動機和可計算性*課程中學會了beta減少,但是課程的文本是荷蘭語:( –

+0

非常感謝您的回答) –