定义haskell中的平均值
在不使用递归的情况下,如何使用类型定义haskell中的平均值,haskell,Haskell,在不使用递归的情况下,如何使用类型[Float]定义平均值?同时给出小数点后两位的答案。我是Haskell的新手,所以我非常感谢您的帮助。即平均值::[Float]->Float 对于mean xs=sum xs/length xs,我得到了以下结果: No instance for (Fractional Int) arising from a use of `/' at test.hs:8:10-27 Possible fix: add an instance declaratio
[Float]
定义平均值?同时给出小数点后两位的答案。我是Haskell的新手,所以我非常感谢您的帮助。即平均值::[Float]->Float
对于mean xs=sum xs/length xs
,我得到了以下结果:
No instance for (Fractional Int)
arising from a use of `/' at test.hs:8:10-27
Possible fix: add an instance declaration for (Fractional Int)
In the expression: sum xs / length xs
In the definition of `mean': mean xs = sum xs / length xs
让我们看一下
/
:
(/) :: Fractional a => a -> a -> a
如您所见,/
的结果与操作数的类型相同
现在让我们看一下长度
:
length :: [a] -> Int
哎呀!您正在向/
传递一个整数。由于(忽略0)整数集在除法下不闭合,/
不会重载整数
因此,首先必须将第二个操作数转换为浮点数:
mean :: [Float] -> Float
mean xs = sum xs / fromIntegral (length xs)
至于给出小数点后两位的答案,我将把它留给负责向用户呈现结果的代码。这不是
mean
的责任,让我们看看/
:
(/) :: Fractional a => a -> a -> a
如您所见,/
的结果与操作数的类型相同
现在让我们看一下长度
:
length :: [a] -> Int
哎呀!您正在向/
传递一个整数。由于(忽略0)整数集在除法下不闭合,/
不会重载整数
因此,首先必须将第二个操作数转换为浮点数:
mean :: [Float] -> Float
mean xs = sum xs / fromIntegral (length xs)
至于给出小数点后两位的答案,我将把它留给负责向用户呈现结果的代码。这不是
mean
的责任如果您只需要两个小数点,而不需要四舍五入,您可以使用div
而不是/
(您必须移动结果中的小数点…):
如果您只需要两个小数点,而不需要四舍五入,则可以使用
div
而不是
(您必须移动结果中的小数点…):
提示:如果为
mean
添加显式签名,您将收到更具描述性的错误消息,因为现在Haskell假设xs:[Int]
。提示:如果为mean
添加显式签名,您将收到更具描述性的错误消息,因为现在Haskell假设xs:[Int]。还考虑<代码>通用长度> /代码>函数。