Haskell-参数太少
我想写一个Haskell程序,计算两个给定数字之间的数字之和。 我有以下代码:Haskell-参数太少,haskell,Haskell,我想写一个Haskell程序,计算两个给定数字之间的数字之和。 我有以下代码: sumInt :: Int -> Int -> Int sumInt x y | x > y = 0 | otherwise = x + sumInt x+1 y 但是当我编译它时,我得到了以下错误: SumInt应用于的参数太少 我不明白我做错了什么。有什么想法吗?你需要在x+1周围加上括号: | otherwise = x + sumInt (x + 1) y 原因是函数应用程序
sumInt :: Int -> Int -> Int
sumInt x y
| x > y = 0
| otherwise = x + sumInt x+1 y
但是当我编译它时,我得到了以下错误:
SumInt应用于的参数太少
我不明白我做错了什么。有什么想法吗?你需要在
x+1
周围加上括号:
| otherwise = x + sumInt (x + 1) y
原因是函数应用程序比运算符绑定得更紧密,所以每当您看到
f x <> y
fxy
这总是被解析为
(f x) <> y
(f x)y
从来没有
f (x <> y)
f(xy)
为什么会被否决+1即使只是否定一下,这个问题也肯定在SO的范围内(这也是一个好问题)。当编译器报告错误时,它是如何尝试读取它的?你能用括号演示一下吗?@MasterMastic编译器会把这个特殊的表达式读作x+(sumInt x)+(1y)
。由于数值文本的多态性,1y
实际上是类型检查,它只是没有可用的Num
实例作为函数。错误来自sumInt x
,据说它的类型为Int
,而x
被称为Int
,因此它遇到的第一个错误是Int->Int
和Int
之间不匹配,这表明您没有足够的参数。