Итак, я только недавно начал программировать в ocaml для своего университета (это необходимо здесь). Я должен написать функциональную единицу -> (int * int) Array Array Array Array, который создает матрицу 16 на 16, в которой записи являются массивами, которые принимают по 4 кортежа.
Мне было явно сказано не писать это функция рекурсивно, поэтому я сделал это:
let matrice_deplacements () =
let u = Array.make 16 (Array.make 16 [||]) in
for k=0 to 15 do
for p=0 to 15 do
u.(k).(p)<-deplacement_grille (k,p)
done;
done;
u;;
И я точно знаю, что функция deplacement_grille (извините за французский) работает отлично, и дает мне именно то, что я хочу (что правильно (int * int ) Массив, для хороших k и p)
Я абсолютно не понимаю, в чем проблема, потому что каждый раз, когда я запускаю этот код (я пробовал с 2 * 2 и 3 * 3 матрицами, и это не работает), ocaml возвращает матрицу, где все строки одинаковы (на самом деле они должны быть последней строкой).
Любая помощь приветствуется. Я на самом деле задаюсь вопросом, сводится ли это к тому, как ocaml хранит Array, это может выглядеть как python, где они имеют одинаковый адрес.