出力をファイルに書き込むことができる単純な関数、たとえばfile.txtを作成しようとしています。出力は乗算表です(下記参照)。九九のOCamlを使って単純な乗算表を出力する
問題は、私は、コード実行時にOCamlはちょうどハングということです(おそらく無限再帰のか?)。
let rec table file x =
let ch = open_out file in
row ch x 1;
close_out ch;;
私はtable "foo" 5
を実行すると、それだけでハングアップ:
(*n is the row counter and n2 is the column counter*)
let rec row ch x n =
let rec column ch x n n2 =
(*If column counter reaches limit then stop here*)
if (n2 = x+1)
then()
else
output_string ch (string_of_int (n2*n));
output_char ch '\t';
column ch x n (n2+1)
in
column ch x n 1;
(*If row counter reaches limit then stop here*)
if n = x+1
then()
else
output_char ch '\n';
row ch x (n+1);;
後、私は次のように表関数の行を呼び出す..私はロジックを見続けると、それは大丈夫そうです。また、今後、どうすればこのようなエラーをよりうまく処理できますか? OCamlの推奨デバッグオプションは?
返信いただきありがとうございます!私のために働いた。セミコロン演算子のために、その直後の印刷式だけを制御しますか? (私が正しく覚えているなら、演算子は左に式を投げ捨てます) –
はい、それを見る別の方法は 'then'と' else'が ';'より高い優先順位を持つことです。 'begin/end'を必要としない他の方法で複数の式を組み合わせることができます。 –