我正在学习 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?
提前致谢!