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