1. ホーム
  2. function

[解決済み] 関数内でのOCamlのシンタックスエラー

2022-02-26 04:41:50

質問

文字列のセットから各要素を表示する関数を作成する必要があります。私は以下のようにしました。

module S = Set.Make(String);;
module P = Pervasives;;
let write x = (
        P.print_string("{"); let first = true;
    S.iter (fun str -> (if first then () else P.print_string(","); P.print_string(str))) x;
    P.print_string("}");
    P.print_newline
  );;
  ^

プログラムの最後(あの記号を置いたところ)で、エラーが発生したようです。Syntax error: operator expected. これを解決するのを助けてください。

どのように解決するのですか?

この構文の問題は let . トップレベルコード(モジュールの一番外側のレベル)を除く。 let は、必ずその後に in .

このコードには他にも多くの問題がありますが、もしかしたらこれで次の問題が見つかるかもしれません :-)

少し注意点を。

OCamlの変数はイミュータブル(不変)です。そのため first は常に真である。それを変更することはできない。この(一見些細な)点が、関数型プログラミングの鍵の1つです。

を参照する必要はありません。 Pervasives モジュールの名前を指定します。それが、"pervasive"と呼ばれている理由です。ただ、次のように言えばいいのです。 print_string を単体で使用します。

最後の呼び出しは print_newline は呼び出しではありません。この式は関数そのものとして評価されるだけです。(関数を呼び出したい場合は引数を与える必要があります)。