私はいくつかの宿題をやっていますが、何かに何時間も立ち往生しています。本当に些細なことだと思いますが、利用可能なすべてのドキュメントを掘り下げた後でも、頭を包むことはできません。誰か手を貸してくれませんか?基本的に、OCaml プログラミングの演習では、関数 x^n を 2 乗アルゴリズムによる累乗で定義するよう求められます。
私は解決策を見てきました:
let rec exp x = function
0 -> 1
| n when n mod 2 = 0 -> let y = exp x (n/2) in y*y
| n when n mod 2 <> 0 -> let y = exp x ((n-1)/2) in y*y*x
;;
私が特に理解していないのは、fun ステートメントからパラメーター n をどのように省略できるか、および x との一致の変数として使用する必要がある理由です。これは、2 乗によるべき乗の定義との明らかな関連はありません。
これが私がそれを行う方法です:
let rec exp x n = match n with
0 -> 1
| n when (n mod 2) = 1 -> (exp x ((n-1)/2)) * (exp x ((n-1)/2)) * x
| n when (n mod 2) = 0 -> (exp x (n/2)) * (exp x (n/2))
;;