如何在[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)
我们来看看/:
(/) :: 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.