定义haskell的平均值

sym*_*mon 1 haskell

如何在[Float]不使用递归的情况下使用类型定义均值?也给出小数点后两位的答案.我是Haskell的新手,所以任何帮助都会非常感激.即mean :: [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
Run Code Online (Sandbox Code Playgroud)

rig*_*old 6

我们来看看/:

(/) :: Fractional a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

如您所见,结果/与操作数的类型相同.

现在让我们来看看length:

length :: [a] -> Int
Run Code Online (Sandbox Code Playgroud)

哎呀!你要传递一个整数/.由于(忽略0)整数集未在除法下关闭,/因此整数不会超载.

因此,首先必须将第二个操作数转换为浮点数:

mean :: [Float] -> Float
mean xs = sum xs / fromIntegral (length xs)
Run Code Online (Sandbox Code Playgroud)

至于给出两位小数的答案,我将其留给负责将结果呈现给用户的代码.这不是责任mean.