私はOcamlを初めて使用しています。このコードには以下の問題があります。配列をソートするプログラムを作成しようとしています。私は2つのハーフに配列を分割し、それらの2つの配列でArray.sortを使用しました(私は後でそれを修正しようとしていますので、Array.sortは使用しません)。そして、私はそれらの2つの配列の要素を比較したいと思いましたが、コードが機能していません。 誰が問題がどこにあるか教えていただけますか?コードが機能しません:ocamlで配列をソート
let a =[|5;4;2;6;1;3|] ;;
let n = Array.length a;;
let l= Array.sub a 0 (n/2);;
Array.sort compare l;;
l;;
let ll= Array.length l;;
let r= Array.sub a (n/2) (n/2);;
Array.sort compare r;;
r;;
let lr=Array.length r;;
let merge l r a =
let k =ref 0 in
let i = ref 0 in
let j =ref 0 in
while(!i<ll && !j< lr) do
if(l.(!i) <= r.(!j)) then
a.(!k) <- l.(!i)
i:= !i+1
else begin
a.(!k) <- r.(!j)
j:= !j+1;
k:= !k+1
end;
while (!i<ll) do
a.(!k)<-l.(!i)
i:= !i+1;
k:=!k+1;
done;
while (!j<ll) do
a.(!k) <-r.(!j)
j:= !j+1;
k:= !k+1
done;
done;;
merge l r a;;
ありがとうございます!今年のこの時期に、誰もが "もし...、始まり...終わりに!" – Lhooq
だから、あなたのコードを操作して、emacsのtuaregや自動インデントを行うものをインデントして、必要に応じて ';'と 'begin ... end'を追加してください。 – Lhooq
完全にLhooqに同意します。さらに、いくつかの ";;"最後の2つのループはあなたの関数 "merge"に属しています。 –