В чем проблема с кодом ниже? Я изо всех сил пытаюсь понять, когда использовать ';' или ';;' или использовать начало в OCaml. Здесь мне нужно прочитать некоторые ребра и вставить в график, но мне нужно связать это с остальной программой, чтобы он мог использовать 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() = in', если я не ошибаюсь. –
RichouHunter
Моя идея 'let g = ....' состояла в том, чтобы обновлять g, чтобы при завершении цикла его можно было использовать остальной частью программы. Я хотел связать его с 'done in', если я не могу это сделать, как я могу это решить? Я думаю, что видел «сделано раньше», но теперь, когда я думаю об этом, он был в цикле for не в цикле while. –
@power_output Единственный способ, которым вы могли бы видеть 'done in', был бы, если бы цикл использовался как значение в выражении' let', то есть 'let something = while cond do ... done in ...'. Во всяком случае, 'let' создает новую переменную - она не влияет на значение существующей переменной (которую вы не можете сделать). Если вы хотите переназначить что-то, вам понадобится 'ref' (или что-нибудь с изменяемым членом). – sepp2k