OCaml - 修改数组值
OCaml - Modify array values
我想用这个函数修改现有的数组,但出于我不明白的原因,一旦我将函数应用到数组,值就不会改变。
我错过了什么?
提前致谢
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;;
错误在 Array.get v i+1 中:这表明 v 是一个 int 数组,并且您加 1 并使条件始终为假。
只需将 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) > v.(i+1)。
最佳做法是在包括二元运算符在内的函数应用程序中放置空格。
很多新人容易误会
Array.get v i+1
as Array.get v (i+1)
但是如果写成
Array.get v i + 1
那么出错的几率应该会低很多。
我想用这个函数修改现有的数组,但出于我不明白的原因,一旦我将函数应用到数组,值就不会改变。 我错过了什么?
提前致谢
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;;
错误在 Array.get v i+1 中:这表明 v 是一个 int 数组,并且您加 1 并使条件始终为假。 只需将 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) > v.(i+1)。
最佳做法是在包括二元运算符在内的函数应用程序中放置空格。
很多新人容易误会
Array.get v i+1
as Array.get v (i+1)
但是如果写成
Array.get v i + 1
那么出错的几率应该会低很多。