ocaml 错误的 pow 函数给出正确的输出

ocaml wrong pow function give correct output

我在 ocaml 中写了一个 pow 函数,错误地写了这个

let rec pow x y acc = if y = 1 then acc else pow x (y-1) x*x;;

可以用任何 acc 值调用此函数并输出正确答案,但这必须输出 x^2 。

这是正确的函数:

let rec pow x y acc = if y = 0 then acc else pow x (y-1) x*acc;;

并使用 acc 的值为 1 调用此函数。

我的问题是为什么第一个函数给出正确的输出?

关键是函数应用的优先级高于二元运算符。在本例中,else 项等同于 (pow x (y-1) x) * x,而不是 pow x (y-1) (x*x)