我正在研究一個 Haskell 問題來嘗試學習這門語言。我正在嘗試遞回地添加串列中的所有元素,所以:
[5,5] -> 10 and [5.0, 5.0] -> 10.0
我知道如何遞回地解決這個問題,但我的問題是,在定義函式時如何處理 Ints 和 Floats?現在我有:
add :: [Int] -> Int
這不適用于浮動。預先感謝您的幫助。
uj5u.com熱心網友回復:
如評論中所示,您正在尋找一個型別類。在這種特殊情況下,由于您想將數字相加,因此您需要Num型別類,它(除其他外)提供了加法功能
( ) :: Num a => a -> a -> a
所以你的簽名應該看起來像
add :: Num a => [a] -> a
并且函式可以遞回撰寫
add [] = 0
add (x:xs) = x add xs
請注意,整數文字(例如0本例中)在內部被視為Num a => a. 實際上,Haskell 編譯器會將數字編譯0為fromInteger (0 :: Integer),其中fromInteger是型別類中的另一個函式Num。因此,整數文字是多型的。
最后,雖然這個實作沒有任何問題,但您正在查看的函式實際上是 Haskell 的內置函式。它被稱為sum。
sum :: (Foldable t, Num a) => t a => a
請注意,這Foldable是一個可以折疊的東西的型別類。串列型別[]是Foldable.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517154.html
標籤:哈斯克尔函数定义
