我在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 of 1的值调用此函数。
我的问题是为什么第一个函数给出正确的输出?
答案 0 :(得分:1)
关键是函数应用程序的优先级高于二元运算符。在目前的情况下,else
字词相当于(pow x (y-1) x) * x
,而不是pow x (y-1) (x*x)
。