簡體   English   中英

在 Haskell 中定義 function 時,您可以同時處理 Int 和 Float 嗎?

[英]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) ,其中fromIntegerNum類型類中的另一個 function。 因此,integer 文字是多態的。

最后,雖然此實現沒有任何問題,但您正在查看的 function 實際上內置於 Haskell。它稱為sum

sum :: (Foldable t, Num a) => t a => a

請注意, Foldable是一個類型類,適用於可以折疊的東西。 列表類型[]Foldable的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM