in
を使用してトップレベルの宣言にリンクすることはできません。 ;;
ではなくin
にエラーが表示される理由は、;;
がin <valid expression>
であると予想されるためです。また、括弧が足りないか不必要な場合には、いくつか問題があります。それを有効な式になるだろう第二レットが同様に結合した後in
を使用して、代わりに
let n = int_of_string (input_line stdin);;
let rec get_ans m n =
if m*(m+1)/2 < n then get_ans (m + 1) n else m;;
print_endline (string_of_int (get_ans 1 n));
:最初in
を削除するとうまくいく
let n = int_of_string (input_line stdin) in
let rec get_ans m n =
if m*(m+1)/2 < n then get_ans (m + 1) n else m in
print_endline (string_of_int (get_ans 1 n))
をしかし、その場合には有力let() =
が作ると推定されますそれは有効なトップレベル宣言です。
どれが好ましいアプローチですか?私はOCamlを初めて使っているので、二重引用符を完全に理解していません。物事とすべてのこと - 私は守らなければならない? – user8926565
また、最初の例は2つの ';;'ではなく、 ';'で終わるのはなぜですか? – user8926565
あなたが周りを遊んでいるのであれば、どちらのフォームも問題ありません。実際のプロジェクトでは、stdinからグローバル変数に読み込むべきではないでしょう。 'print_endline ...'の中でlet()= let n = ...で 'main'関数の種類を定義し、' get_ans'関数をトップレベルの宣言として保つのが普通です – glennsl