2016-02-14 81 views
0

我剛開始學習Haskell,我試圖在Haskell中使用lambda演算。我發現這個表達式將教堂的數字轉換成數字,但我似乎無法弄清楚這個表達式中的0是什麼意思。我找不到它:這個haskell表達式意味着什麼

zero = (\f -> \x -> x) 
one = (\f -> \x -> f x) 
two = (\f -> \x -> f (f x)) 

getNum church = church (\x-> (x + 1)) 0 

這是最後一個讓我困惑的零。這是lambda表達式的基本情況還是一些參數?

+1

教堂號碼是接受兩個參數的函數,而'church'變量就是這樣一個數字。所以它被稱爲兩個參數,一個是lambda表達式,另一個是0. –

+0

好的,謝謝!但是表達式(\ x->(x + 1))只有1個參數,所以當0被替換時,它變成0 + 1。但是它是如何工作5個左右的?我還是不太明白。教會是Haskell語言中預定義的東西嗎? –

+0

也許你可以通過'getNum zero'求值,然後'getNum one',然後'getNum two'# –

回答

5

這是「教堂」功能的第二個參數。教會數字是在Lambda微積分中計算的一種方法。他們的工作方式與Peano號碼相似。在那些你可以像這樣計數

Z = 0 
S Z = 1 
S S Z = 2 

將「Z」讀作「零」和「S」作爲「後繼」。所以1是0的繼承者,2是1的繼承者。實際上它是一元計數。

在Lambda微積分中,您只有函數應用程序,因此您可以將2定義爲接受參數「f」並將其應用兩次的函數。

在你的例子中,教會數字零,一和二被定義。每個函數都有兩個參數。第一個參數是要應用的函數,第二個參數是應用它的值。 getnum函數使用功能succ(即\x -> x+1),然後將N次應用於基本情況「0」。

你也可以定義

getPeano church = church ('S':) "Z" 

這會的「S」 S正確的號碼,預先準備的Z到一個堂號轉換成數字皮亞諾。

+0

噢,我現在明白了。非常感謝你的明確解釋:) –

相關問題