2009-11-02 49 views
4

在lambda微積分(λx。λy。λs。λz。xs(ysz))用於添加兩個Church數字我們該如何解釋,是否有任何好的資源lambda函數式編程的微積分?您的幫助非常感謝用於函數式編程的λ演算

+0

檢查頁面右側的「相關」部分:http://stackoverflow.com/questions/515413/what-are-some-resources-for-learning-lambda-calculus,http:// stackoverflow .com/questions/1051033/lambda-calculus-and-church-numerals-confusion等 – Groo 2009-11-02 17:27:53

回答

7

其實λf1。 λf2。 λs。 λz。 (f1 s(f2 s z))計算加法,因爲它實際上將f2表示的數字代入(f2 s z)到f1 s z內部的「零」。

示例:讓我們以展開形式爲f2,s s z取兩個。 f1是一個:s z。用f2替換最後的z,並得到s s s z,擴展形式爲三。

用黑板和手揮手會很容易,對不起。

1

在lambda微積分中,您根據其引發的操作對數據類型進行編碼。舉例來說,一個布爾是隻是一個選擇函數,它在輸入兩個值a和b,要麼返回a或b:

     true = \a,b.a false = \a,b.b 

什麼用自然數的?其主要計算目的是爲 提供一個迭代的界限。爲f的n次出現

     n = \f,x.f(f(....(f x)...)) 

:所以,我們編寫一個自然數作爲操作 ,在輸入需要一個函數f,x的值,並重復f的應用 X上的n次。

現在,如果你想要遍歷N + M次函數f從X 必須開始迭代n次首發,這是(NFX),然後重複用於M個附加 倍,從以前的結果出發,這是

       m f (n f x) 

同樣,如果你想重複N * m次需要迭代m次 迭代n次f的操作(如在兩個嵌套循環),也就是

        m (n f) x 

前面對數據類型的編碼更詳細地用構造函數和相應消除器(所謂的 Bohm-Berarducci編碼)的術語 進行了解釋。