我是Ocaml的新手,我對此代碼有問題(下文)。我正在嘗試編寫一個程序來對數組進行排序。我將數組分成兩部分,然後在這兩個數組上使用Array.sort(我將在後面解決這個問題,所以我不會使用Array.sort)。然後我想比較這兩個數組中的元素,但是我的代碼不工作。 有誰能告訴我問題在哪裏?代碼不工作:在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個循環屬於你的函數「合併」 –