Вы должны набирать ;;
, если вы хотите, чтобы toplevel (интерпретатор OCaml) оценил, что вы набрали до сих пор. Если вы введете ;;
частично через синтаксическую конструкцию, вы не можете ожидать, что следующий текст будет частью того, что вы набрали до сих пор. Кроме того, вам нужно разделить выражения на ;
. Вам нужны скобки или начало/конец, если вам нужно два выражения после then
.
Другими словами, это должно исправить синтаксические проблемы:
let summry var3 =
if var3 > 1 then begin
var4=var3;
for i = var4-1 downto 0 do var3=var3+i done
end
else if var3 == 1 then var3 = 1
else var3 = 0
Это должно исправить синтаксис, но у вас есть другие проблемы. Два из них, которые я вижу сразу, следующие: (a) оператор OCaml =
используется для сравнения значений, а не для присвоения значений, как вы ожидаете; (b) ваш код написан в императивном стиле и ожидает изменения значений переменных с помощью присваивания. Переменные OCaml неизменяемы. Вы не можете изменить их значения, если вы специально не используете для них изменяемый тип.
Хорошо, так что можно, например, назначить var3 в var4, я должен использовать let? Извините, но я действительно noob – Teshtek
'let' вводит новую неизменяемую локальную переменную, она не назначает к существующей переменной. Для изменения значений вам нужно что-то изменяемое, например [ссылка] (http://caml.inria.fr/pub/docs/manual-ocaml/coreexamples.html#sec12). Но позвольте мне посоветовать вам научиться писать функциональный код, если у вас есть время, это одна из лучших причин для изучения OCaml. –