我是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个循环属于你的函数“合并” –