2015-05-24 68 views
4

什麼下面的函數定義/聲明表示:Haskell的功能定義,而不 - >

maxCollatz :: (Integer, Integer) 

我很困惑,因爲我不知道需要什麼樣的參數,並因此產生了什麼。因爲通常在函數定義中有->。例如, Int -> Int

P.S.再次爲這類問題感到抱歉。

回答

8

maxCollatz是一對整數(Integer, Integer)。它不是一個函數,它不需要任何參數,也不會被調用來產生任何東西;它只是的一對整數。

在Haskell中聲明類型然後實現頂層聲明的語法是定義值的語法。函數是值,所以它們包含在內,但其他所有內容都包含在內。

+0

基於它的名字,我認爲它是一對整數或⊥,並且沒有人知道哪一個。 – dfeuer

0

此函數不接受任何參數,因此它只是一個常量元組(或一對)的兩個整數。

0

這是一個函數簽名,而不是整個函數的定義。

這是一個常數,而不是一個「真正的函數」(我已經看到了它的爭論)。它返回一個2個整數的元組,但不需要任何東西。

1

代碼行是一個有效的函數簽名,因爲了解函數不必採用任何參數很重要。

的參數的數目的函數採用被稱爲其arity.

在邏輯,數學和計算機科學中,功能或操作的元數是參數的數量或操作數的功能或操作接受。

在這種情況下,該函數需要0個參數並且是arity0。具有arity0的函數通常被稱爲常量函數或nullary函數。


在Python有類似的功能應該是這樣的

def pair(): 
    return (1,1) 

如果你熟悉Python很顯然,這個函數沒有參數,並返回一對數字。這正是您提供的功能簽名描述的內容。

+3

'maxCollat​​z'是一對'整型',不是函數。 Haskell中的函數總是隻有一個參數,所以沒有0個參數函數:http://conal.net/blog/posts/everything-is-a-function-in-haskell –