哈斯克尔 - 论点太少了

Dia*_*ana 4 haskell

我想写一个Haskell程序,计算2个给定数字之间的数字之和.我有以下代码:

sumInt :: Int -> Int -> Int
sumInt x y
   | x > y = 0
   | otherwise = x + sumInt x+1 y
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时,我收到以下错误:

SumInt适用于太少的参数.

我不明白我做错了什么.有任何想法吗?

bhe*_*ilr 5

你需要围绕括号x+1:

| otherwise = x + sumInt (x + 1) y
Run Code Online (Sandbox Code Playgroud)

原因是函数应用程序比运算符更紧密,所以无论何时你看到

f x <> y
Run Code Online (Sandbox Code Playgroud)

这总是被解析为

(f x) <> y
Run Code Online (Sandbox Code Playgroud)

从来没有

f (x <> y)
Run Code Online (Sandbox Code Playgroud)

  • @MasterMastic编译器会将此特定表达式读作`x +(sumInt x)+(1 y)`.由于数字文字的多态性,`1 y'实际上是typechecks,它只是没有可用的'Num`实例.错误来自`sumInt x`,据说它有类型`Int`,`x`被称为`Int`,所以它遇到的第一个错误是`Int - > Int`和`Int`之间的不匹配,它表明你没有足够的参数. (2认同)