Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定义haskell中的平均值_Haskell - Fatal编程技术网

定义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]。还考虑<代码>通用长度> /代码>函数。