Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell-参数太少_Haskell - Fatal编程技术网

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 原因是函数应用程序

我想写一个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
原因是函数应用程序比运算符绑定得更紧密,所以每当您看到

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
之间不匹配,这表明您没有足够的参数。