2016-10-25 6 views

ответ

1

Вы должны набирать ;;, если вы хотите, чтобы 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 неизменяемы. Вы не можете изменить их значения, если вы специально не используете для них изменяемый тип.

+0

Хорошо, так что можно, например, назначить var3 в var4, я должен использовать let? Извините, но я действительно noob – Teshtek

+0

'let' вводит новую неизменяемую локальную переменную, она не назначает к существующей переменной. Для изменения значений вам нужно что-то изменяемое, например [ссылка] (http://caml.inria.fr/pub/docs/manual-ocaml/coreexamples.html#sec12). Но позвольте мне посоветовать вам научиться писать функциональный код, если у вас есть время, это одна из лучших причин для изучения OCaml. –

0

Вы должны удалить те ;;

;; являются верхним уровнем маркеров, это означает «конец декларации» и не может быть поставлено в середине выражения.

Это распространенная ошибка, чтобы запутать его для большого количества языков ;, но скорее следует рассматривать как инструкцию «вернуться к глобальной области действия».

Смежные вопросы