我只是試着寫一個簡單的函數來計算輸入的int型平均:哈斯克爾:類型不匹配
avg :: Int -> Int -> Int -> Float
avg x y z = (x+y+z)/3
當我交換籤名
avg :: Float -> Float -> Float -> Float
它的工作原理罰款,但與上面的一個我得到以下錯誤信息:
無法匹配實際類型'詮釋'的預期類型'浮動'。
我必須使用第一個簽名,它接受Ints(僅)的可能性?
我只是試着寫一個簡單的函數來計算輸入的int型平均:哈斯克爾:類型不匹配
avg :: Int -> Int -> Int -> Float
avg x y z = (x+y+z)/3
當我交換籤名
avg :: Float -> Float -> Float -> Float
它的工作原理罰款,但與上面的一個我得到以下錯誤信息:
無法匹配實際類型'詮釋'的預期類型'浮動'。
我必須使用第一個簽名,它接受Ints(僅)的可能性?
使用fromIntegral
到Int
秒值進行轉換,以Float
S:
avg :: Int -> Int -> Int -> Float
avg x y z = (fromIntegral x + fromIntegral y + fromIntegral z)/3
短:
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)
不是'x + y + z'比sum [x,y,z]'短嗎? –
否,但'fromIntegral $ sum [x,y,z]'短於'從整數x +從整數y + fromInteral z'。而且它更容易概括... – Landei
你正在回答與我所問的不同的東西。 –
感謝編輯,@hammar。 – dave4420