我正在阅读 Graham Hutton 的《Haskell 编程》,并运行一些示例代码来演示如何对整数列表求平均值。有问题的函数是
平均 ns = 总和 ns div 长度 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 <strong>`div`</strong> length ns
在 div
周围加反引号。这些反引号用于使用 div
作为运算符,因此相当于 div (sum ns) (length ns)
。
关于haskell - 无法将预期类型 `(a1 -> a1 -> a1) -> (t0 a0 -> Int) -> t Int -> Int' 与实际类型 `Int' 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73045772/