[英]Can you handle both Int and Float while defining a function in Haskell?
我正在研究一個 Haskell 問題來嘗試學習這門語言。 我正在嘗試遞歸地添加列表中的所有元素,因此:
[5,5] -> 10 and [5.0, 5.0] -> 10.0
我知道如何遞歸解決這個問題,但我的問題是,在定義 function 時如何處理整數和浮點數? 現在我有:
add :: [Int] -> Int
這不適用於浮動。 預先感謝您的幫助。
如評論中所示,您正在尋找類型類。 在這種特殊情況下,由於您想將數字相加,因此需要Num
類型類,它(除其他外)提供加法 function
(+) :: Num a => a -> a -> a
所以你的簽名應該是這樣的
add :: Num a => [a] -> a
並且 function 可以遞歸地寫
add [] = 0
add (x:xs) = x + add xs
請注意,integer 字面量(例如本例中的0
)在內部被視為Num a => a
。 實際上,Haskell 編譯器會將數字0
編譯為fromInteger (0:: Integer)
,其中fromInteger
是Num
類型類中的另一個 function。 因此,integer 文字是多態的。
最后,雖然此實現沒有任何問題,但您正在查看的 function 實際上內置於 Haskell。它稱為sum
。
sum :: (Foldable t, Num a) => t a => a
請注意, Foldable
是一個類型類,適用於可以折疊的東西。 列表類型[]
是Foldable
的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.