Я изучаю OCaml и, хотя у меня есть многолетний опыт работы с императивными языками программирования (C, C ++, Java), у меня возникают некоторые проблемы с разделителями между объявлениями или выражениями в синтаксисе OCaml.
В основном японял, что я должен использовать ;
для объединения выражений, и значение, возвращаемое последовательностью, будет последним использованным выражением, поэтому, например, если у меня есть
exp1; exp2; exp3
, оно будет рассматриваться как выражениекоторый возвращает значение exp3
.Исходя из этого, я мог бы использовать
let t = something in exp1; exp2; exp3
, и все должно быть в порядке, верно?
Когда я должен использовать двойную точку с запятой ;;
?Что именно это означает?
Существуют ли другие разделители, которые я должен использовать, чтобы избежать синтаксических ошибок?
Я приведу вам пример:
let rec satisfy dtmc state pformula =
match (state, pformula) with
(state, `Next sformula) ->
let s = satisfy_each dtmc sformula
and adder a state =
let p = 0.;
for i = 0 to dtmc.matrix.rows do
p <- p +. get dtmc.matrix i state.index
done;
a +. p
in
List.fold_left adder 0. s
| _ -> []
Это даетмне синтаксическая ошибка на |
но я не понимаю почему .. что мне не хватает?Это проблема, которая часто возникает, и мне приходится пробовать много разных решений, пока она не заработает: /
Дополнительный вопрос: вместо let
объявляется, что let .. in
будет определять привязку var, которая сохраняется каждый раз послеоно было определено?
В основном я спрашиваю: какие разделители я должен использовать и когда я должен их использовать.Кроме того, есть ли различия, которые я должен учитывать при использовании интерпретатора ocaml
, вместо этого, что компилятор ocamlc?
Заранее спасибо!