首页 > 解决方案 > Ocaml中的反向数组

问题描述

我在 OCaml 中写了这个来反转数组,就像我通常在 Java 中所做的那样:

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"|]

有人可以解释什么是错的吗?

标签: ocaml

解决方案


假设长度为 2。您的 for 循环正在执行 i = 0 和 1。这会将元素反转两次。

通常人们会用受 C 语言影响的语言编写循环,如下所示:

for (i = 0; i < len/2; i++)

这仅对 i = 0 执行,这是正确的。OCaml 对包括上限值在内的所有值执行循环。


推荐阅读