我有一个简单的功能:
let rec ap x y = if x < 10 then 12 else ap((x-1) (y));;
但我不断得到的错误是:
Error: This expression has type int
This is not a function; it cannot be applied.
我现在已经坚持了2个小时,我无法弄清楚为什么这不起作用?
此外,我只是简化了函数,因为在我的实际ocaml代码中,问题归结为此。我不确定这是否与currying有关,但有人可以解释为什么会这样吗?
答案 0 :(得分:6)
OCaml编译器认为您在((x-1)(y)中将(x-1)应用于(y)。这就是你得到错误的原因:“这个表达式有int类型。这不是一个函数;它不能被应用。”
实际上,你必须写ap(x-1)(y),因为ap有两个参数。
请记住,在OCaml(或其他Hindley-Milner派生语言:SML,Haskell)中,不需要使用括号来应用函数,并且与C语言相反,它们用于不同的目的。