OCamlの ; と ;; の違いが分からない


.mlファイルの中のOCamlコードで、以下のようなコードを書いた際、

[code]

    let print_for_print_test str =
      for i = 0 to String.length-1 str do
        print_string(str)
        print_newline()
      done;;
    
[/code]

3行目に `;` が足りない、という意味のエラーメッセージが出ました。実際に `;` を補えばうまくいったのですが、OCamlでの `;` と `;;`
の違いがよく分かりません。よろしければご教授お願いします。




[こちら(ocaml.org)](https://ocaml.org/learn/tutorials/structure_of_ocaml_programs.ja.html#_4)
が参考になると思います。

一部を抜粋します。

> ルール1。;;を使うべきときとは、コードのトップレベルにある文を区切るときだ。関数定義の中のときや、他の文のときは、いらない。
>
> ルール3と4は、一重の;についてだ。こいつは、;;とは完全に別物だ。セミコロンひとつの;は、
> シークエンスポイントということになっている。言ってみれば、これは、C、C++、Java、Perlのセミコロンひとつと全く同じことである。

* * *

3行目のみ必要な点については、 4行目はブロックの最後なので `;`が無くても式の終わりがわかりますが、 3行目はそうではないので 式の区切りを示す `;`
が必要となります。

