2011-10-18 153 views
2

我只是試着寫一個簡單的函數來計算輸入的int型平均:哈斯克爾:類型不匹配

avg :: Int -> Int -> Int -> Float 
avg x y z = (x+y+z)/3 

當我交換籤名

avg :: Float -> Float -> Float -> Float 

它的工作原理罰款,但與上面的一個我得到以下錯誤信息:

無法匹配實際類型'詮釋'的預期類型'浮動'。

我必須使用第一個簽名,它接受Ints(僅)的可能性?

回答

9

使用fromIntegralInt秒值進行轉換,以Float S:

avg :: Int -> Int -> Int -> Float 
avg x y z = (fromIntegral x + fromIntegral y + fromIntegral z)/3 
+0

感謝編輯,@hammar。 – dave4420

2

短:

avg :: Int -> Int -> Int -> Float 
avg x y z = (fromIntegral $ sum [x,y,z])/3.0 

或者你概括本作的Int的List:

avg :: [Int] -> Float 
avg xs = (fromIntegral $ sum xs)/(fromIntegral $ length xs) 
+0

不是'x + y + z'比sum [x,y,z]'短嗎? –

+0

否,但'fromIntegral $ sum [x,y,z]'短於'從整數x +從整數y + fromInteral z'。而且它更容易概括... – Landei

+0

你正在回答與我所問的不同的東西。 –