2014-04-28 111 views
1

對於此功能:函數參數是如何定義的?

plus1 = (+) 1 

我可以使用:

Prelude> plus1 3 
4 

類型PLUS1是

plus1 :: Integer -> Integer 

如何函數參數整數被允許在這裏?在我的函數定義中,Integer函數參數定義在哪裏?

我不確定我期望會發生什麼,但是來自Java的所有參數都需要定義爲方法的一部分,但這裏似乎有幕後的事情發生了嗎?

+0

您使用短語「功能參數」至少對我來說有點混亂。你能更明確地陳述你認爲會發生什麼事情嗎? – Chuck

+0

@Chuck請參閱更新 –

+0

這個例子實際上用於解釋curried函數,參見:http://www.haskell.org/tutorial/functions.html。 –

回答

8

(如果我們忽略Num類型類了一下,假裝+適用於Integer唯一爲簡單起見,)(+)Integer -> (Integer -> Integer)類型的函數(括號是沒有必要的,因爲->是右關聯,但爲了清楚起見,我添加了它們)。這意味着它需要Integer類型的參數,併產生一個類型爲Integer -> Integer的函數作爲結果。

因此,當您將(+)應用於整數1時,您確實會得到該類型的函數作爲結果。由於add1擁有該結果,因此它是Integer -> Integer類型的函數,這就是爲什麼您可以將其應用爲plus1 3

+3

+1,很難理解currying,但如果你知道Java/Javascript,你需要將'add'看作'function add(o1){return function(o2){return o1 + o2; }}',並將其稱爲'add(1)(2)'。那麼應該清楚'add(1)'實際上是什麼。 –

相關問題