OCaml 循环时出现语法错误

syntax error while loop in OCaml

下面的代码有什么问题?我很难知道什么时候使用';'要么 ';;'或者在 OCaml 中使用 begin end。在这里,我需要读取一些边并插入到图形中,但我需要 link 将其与程序的其余部分一起使用,以便它可以对所有边使用 g(a graph)。 当我这样做时,它说错误:语法错误

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)

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

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

另请注意,在循环中您执行了 let g = ...,但您并未在 let 正文的任何​​位置使用 g。所以绑定什么也做不了。