Ваш код не является правильно сформированным кодом OCaml. Тем не менее, он освещает ряд проблем, связанных с вашим пониманием OCaml.
Прежде всего, по умолчанию значения в OCaml являются неизменными . Например,
let x = 0 in
for i = 0 to 10 do
let x = x + 1 in
print_int x;
done
Вы получите 11111111111
в качестве вывода. Это потому, что во время цикла вы просто каждый раз вычисляете выражение x+1
, где x
всегда равно 0
, и в результате вы всегда получите 1
. Это связано с тем, что let x = <expr> in <body>
не изменяет существующую переменную x
, но создает новую переменную x
(скрывает все предыдущие определения) и делает ее доступной в области действия выражения <body>
.
Что касается вашей проблемы в целом, она должна быть решена как рекурсивная функция greatest_element
, которая имеет следующее определение
- для пустого списка
[]
не определено;
- для списка из одного элемента
[x]
это x
;
- в противном случае для списка
x::xs
это max x (greatest_element xs),
где max x y
равно x
, если оно больше или равно y
.
Наконец, похоже, что вы пропустили первые шаги в OCaml, и прежде чем решать эту задачу, вам нужно вернуться назад и изучить основы. В частности, вы должны научиться вызывать функции, связывать переменные и вообще каковы лексические соглашения и синтаксис языка. Если вам нужны указатели, не стесняйтесь спрашивать.