我想用这个函数修改一个现有的数组但是由于一个原因我不理解一旦我将该函数应用于数组,值就不会改变。 我错过了什么?
提前致谢
let test v (a,b) =
for i=a to b do
if ((Array.get v i)>(Array.get v i+1)) then
let tmp = (Array.get v i) in
v.(i)<-(Array.get v i+1);
v.(i+1)<-tmp;
done;;
答案 0 :(得分:3)
最佳做法是在函数应用程序中添加空格,包括二元运算符。
许多新人倾向于误解
Array.get v i+1
为Array.get v (i+1)
,但如果它写成
Array.get v i + 1
那么错误的几率应该低得多。
答案 1 :(得分:2)
错误在Array.get v i + 1中:这表示v是一个int数组,并且您添加1并使条件始终为false。 只需将i + 1放在括号中:v将是任何类型的数组,它将解决您的问题。
let test v (a,b) =
for i=a to b do
if Array.get v i > Array.get v (i+1) then
let tmp = (Array.get v i) in
v.(i)<-(Array.get v (i+1));
v.(i+1)<-tmp;
done;;
您可以使用v。(i)&gt;编写。诉(I + 1)。