OCaml中循环时的语法错误

时间:2016-04-28 12:45:03

标签: while-loop ocaml

以下代码的问题是什么?我知道何时使用&#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)

1 个答案:

答案 0 :(得分:2)

inlet语法的一部分("let" pattern "in" expression)。 while循环的语法只是"while" expression "do" expression "done",所以那里没有in

要使代码编译,您可以将in替换为;,因此它会执行while循环,然后执行let表达式。然而,对于我来说,在一堆函数定义之间有一个while循环似乎很奇怪。

另请注意,在循环中您执行了let g = ...,但是您在g的正文中没有使用let。所以绑定什么也没有完成。