0
下面的代码有什么问题?我知道何时使用'',我挣扎了很多';'要么 ';;'或者在OCaml中使用begin end。在这里,我需要阅读一些边缘并插入到图形中,但我需要将其与程序的其余部分链接起来,以便它可以将g(图形)与所有边缘一起使用。 当我做到这一点,它说错误:语法错误在OCaml中循环时出现语法错误
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)
实际上,';'只是'let()= '的语法糖,如果我没有弄错的话。 –
RichouHunter
我对'let g = ....'的想法是不断更新g,这样当while循环结束时它可以被程序的其余部分使用。我想把它与'完成'连接起来,如果我不能这样做,我该如何解决这个问题?我认为我之前看到'完成了',但现在我认为它是在for循环中,而不是在一个while循环中。 –
@power_output如果循环被用作'let'表达式中的值,也就是'let something = while cond do ... done in ...',那么你会看到'done in'的唯一方法。无论如何,'let'会创建一个新变量 - 它不会影响现有变量的值(您不能这么做)。如果你想能够重新分配一些东西,你需要一个'ref'(或任何带有可变成员的东西)。 – sepp2k