OCaml Currying /多个参数

时间:2014-01-19 20:14:40

标签: functional-programming ocaml currying

我有一个简单的功能:

 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有关,但有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:6)

OCaml编译器认为您在((x-1)(y)中将(x-1)应用于(y)。这就是你得到错误的原因:“这个表达式有int类型。这不是一个函数;它不能被应用。”

实际上,你必须写ap(x-1)(y),因为ap有两个参数。

请记住,在OCaml(或其他Hindley-Milner派生语言:SML,Haskell)中,不需要使用括号来应用函数,并且与C语言相反,它们用于不同的目的。