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 = ....」という私の考えは、whileループが終了したときに残りのプログラムで使用できるようにgを更新し続けることでした。私は 'done in'とリンクしたいと思っています。もし私がそれをできないのであれば、どうすればこの問題を解決できますか?私は前に 'done in'を見たと思うけど、今度はforループであって、whileループではないと思います。 –
@ power_output 'done 'と表示される唯一の方法は、ループが' let'式の値として使用された場合です。つまり、 'let something = while cond do ... done in'です。とにかく、 'let'は新しい変数を作成します。既存の変数の値には影響しません。あなたが何かを再割り当てできるようにするには、 'ref'(または変更可能なメンバーを持つもの)が必要です。 – sepp2k