以下代码的问题是什么?我知道何时使用&#39 ;;'我正在苦苦挣扎。或者&#39 ;;;'或者在OCaml中使用begin end。在这里,我需要阅读一些边缘并插入图形,但我需要将其与程序的其余部分链接,以便它可以使用g(图形)与所有边缘。 当我这样做时,它说错误:语法错误
let i = ref n in
while !i > 0 do
(
let pair = read_edge Scanning.stdin in
let g = insert_edge (fst pair) (snd pair) g in
i := !i - 1
)
done in (* giving error in this line *)
let rec do_stuff l =
match l with
| [] -> ()
| h::t -> print_int h;do_stuff t in
( * more functions)
答案 0 :(得分:2)
in
是let
语法的一部分("let" pattern "in" expression
)。 while循环的语法只是"while" expression "do" expression "done"
,所以那里没有in
。
要使代码编译,您可以将in
替换为;
,因此它会执行while循环,然后执行let
表达式。然而,对于我来说,在一堆函数定义之间有一个while循环似乎很奇怪。
另请注意,在循环中您执行了let g = ...
,但是您在g
的正文中没有使用let
。所以绑定什么也没有完成。