我只是试着写一个简单的函数来计算输入的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