我正在阅读Graham Hutton的《Programming in Haskell》,并且正在运行一些演示如何对整数列表求平均值的示例代码。这里的函数是
average ns = sum ns div length ns
完整的错误信息是
Couldn't match expected type `(a1 -> a1 -> a1)
-> (t0 a0 -> Int) -> t Int -> Int'
with actual type `Int'
* The function `sum' is applied to four arguments,
but its type `t Int -> Int' has only one
In the expression: sum ns div length ns
In an equation for `average': average ns = sum ns div length ns
* Relevant bindings include
ns :: t Int (bound at ch2-4.hs:7:9)
average :: t Int -> Int (bound at ch2-4.hs:7:1)
我对这门语言有点陌生,所以错误信息很令人困惑,即使阅读了文档。如果有任何调试的帮助,我将不胜感激。
我还想指出,我知道运行average ns = div (sum ns)(length ns)
也可以工作,但在它之前的函数更自然。
可能的代码示例是:
average ns = sum ns`div`length ns
在div
周围带反引号。这些反引号用于使用div
作为操作符,因此相当于div (sum ns) (length ns)
。