我写这是为了像我通常在Java中那样在OCaml中反转数组:
let reversearray array = let len=Array.length array in
for i=0 to (len/2) do
let temp = array.(i) in
array.(i) <- array.(len-i-1);
array.(len-i-1) <- temp done;
array;;
但是,有时即使有偶数数组,这似乎也不起作用。
# let a2 = [|"a"; "b"; "c"; "d"; "e"; "f"|];;
val a2 : string array = [|"a"; "b"; "c"; "d"; "e"; "f"|]
# reversearray a2;;
- : string array = [|"f"; "e"; "c"; "d"; "b"; "a"|]
有人可以解释出什么问题吗?
答案 0 :(得分:2)
假设长度为2。对于i = 0和1,您的for循环正在执行。这会使元素反转两次。
常见的一种用受C影响的语言编写循环,如下所示:
for (i = 0; i < len/2; i++)
这仅针对i = 0执行,这做对了。 OCaml对所有值(包括上限值)执行循环。