Я хочу найти максимальный элемент в списке int. Идея состоит в том, чтобы вызвать find_max
только один раз и позволить support
выполнить грязную работу. Функция support
возвращает int, первое значение равно 0, затем, когда обнаруживается новый max
, его значение сохраняется, добавляется к результату, предыдущий максимум изменяется, и его значение вычитается из результата.
Это потому, что:
old_max = x
result = 0 + old_max
Обнаружен новый максимум:
new_max= y
result = result - oldmax + new_max
Поэтому я сохраню значение new_max
:
0 + old_max - old_max + new_max = new_max`.
Очевидно, что приведенный выше код является пояснительным, это мой настоящий код:
let find_max random =
let rec support rlist max =
if rlist==[] then 0
else
if (List.hd rlist) > max
then -max + (List.hd rlist) + support (List.tl rlist) (List.hd rlist)
else support (List.tl rlist) max ;;
let return = support random 0 0 ;
!return;;
let a = [1;2;3];
print_string "max element in list is : "
print_int (find_max a);
print_string "\n"
Ошибка в строке 9 !return;;
, синтаксическая ошибка (очевидно: /) в ;;