Это должно быть let size = Array.length arr in
, обратите внимание на in
, которого вам не хватает.
Выражение let
в OCaml имеет форму let <var> = <expr> in <body>
, и его не следует (но обычно) путать с определением let , которое может встречаться только на верхнем уровне (как элемент модуля), который имеет форму let <name> = <body>
.
В вашем примере у вас есть как определение верхнего уровня, let shift_array = <body>
, так и два выражения let (хотя вы использовали неправильный синтаксис для них.
РЕДАКТИРОВАТЬ:
Поскольку OP редактировал сообщение, вот соответствующее изменение.
Ваша функция ничего не возвращает, она создает новый массив, делает цикл, но не возвращает ничего, кроме значения unit
(которое является значением, которое оценивает цикл for). Таким образом, вам нужно добавить еще одну строку, которая будет содержать выражение, для которого вся функция будет оценивать . Подсказка: оператор последовательности ;
- это то, что вам нужно, когда у вас есть выражение x;y;z
, компьютер оценивает x
, затем y
и, наконец, z
, а значение всего выражения x;y;z
является значение z
.