Обратный массив в Окамле - PullRequest
       6

Обратный массив в Окамле

0 голосов
/ 11 сентября 2018

Я написал это для обратного массива в 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"|]

Может кто-нибудь объяснить, что не так?

1 Ответ

0 голосов
/ 11 сентября 2018

Допустим, длина равна 2. Ваш цикл for выполняется для i = 0 и 1. Это дважды меняет элементы.

Обычно пишут циклы на языках, подверженных влиянию Си, например:

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

Это выполняется только для i = 0, что делает правильную вещь. OCaml выполняет цикл для всех значений , включая верхнего значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...