2017-03-07 49 views
0

我OCaml中和了錯誤的寫了一個戰俘函數寫這ocaml的錯誤POW功能給正確的輸出

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

此功能可與ACC和輸出正確答案的任何值調用,但這必須輸出x^2。

這是正確的functon:

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

,並調用此函數的1

我的問題是,爲什麼第一個函數給出正確的輸出ACC的價值?

回答

1

關鍵是函數應用比二元運算符具有更高的優先級。在這種情況下,else的術語相當於(pow x (y-1) x) * x,而不是pow x (y-1) (x*x)