OCaml
最初のOCamlスクリプトを書く
サーチ…
こんにちは世界
この例では、 OCamlをインストールしたことを前提としています。
OCamlコードのコンパイル
次の内容のhello.mlという名前の新しいファイルを作成します。
print_string "Hello world!\n"
ocamlcはOCamlコンパイラです。このスクリプトをコンパイルして実行するには、
$ ocamlc -o hello hello.ml
結果のバイナリを実行します
$ ./hello
Hello world!
OCamlコードの実行
バイナリにコンパイルせずにこのスクリプトを実行することもできます。あなたは使用して行うことができocaml OCamlでの対話的な使用を可能にし、OCamlのトップレベルのシステムを。あなたのシェルでは、単に実行する
$ ocaml hello.ml
Hello world!
REPLでは
新しいシェルを開き、 ocamlと入力してトップレベルシステムを開きます。セッションに入ると、同じプログラムを入力することができます:
OCaml version 4.02.1
# print_string "hello world!\n";;
Enterキーを押して式を評価し、印刷をトリガーします。
hello world!
- : unit = ()
成功! hello world!しかし、 - : unit = ()については何ですか? OCamlには文がなく、すべてが型付きの値に評価される式です。この場合、 print_stringはstringを入力として受け取り、 unitを返します。 unitは、1つの値() (単位ともいいます()取ることができるタイプとみなし、意味のある値を返さない完成した計算を表します。
この場合、 print_stringには入力として受け取った文字を画面にprint_stringもあります。これが最初の行を見る理由です。
REPLを終了するには、 ctrl+D押します。
Unixスクリプト
OCamlスクリプトを作成する方法は2つあります。最初はシステムトップレベル( apt-getようなパッケージマネージャによって提供されます)を使用し、2番目はOPAMが提供するトップレベルを使用します 。
システムトップレベルを使用する
あなたの好きなエディタを開き、以下を書いてください:
#!/usr/bin/ocaml
print_string "hello worlds!\n";;
その後、 chmod +x your_file.mlを使用し、. ./your_file.mlスクリプトを実行することができます。
OPAMが提供するトップレベルを使用する
#!/usr/bin/env ocaml
print_string "hello worlds!\n";;
大きな違いは、あなたのトップレベルのバージョンです。実際、特定のスイッチ( opam switch 4.03.0 )でOPAMを設定した場合、スクリプトはOCaml 4.03.0を使用します。最初の方法では、例えばDebian Sidでは、スクリプトはOCaml 4.02.3を使用します。
あなたは置き換えることができシェバングをで#!/usr/bin/env utop使用するutop代わりにバニラトップレベルを。
〜する
utopはディストリビューションの外にある別のocamlトップレベルです。つまり、あなたはutopをダウンロードしてインストールする必要があります(簡単な方法はOPAM: opam install utopを使用opam install utop )。 utopは、歴史的な、完成した、インタラクティブなライン編集といった多くの機能があります。
あなたがocamlコードを簡単に試してみたいのであれば、 utopが最高です。
なぜutopないocaml ?
あなたが上記のようなocamlスクリプトを望むなら、 utopとocamlは大きな違いはありません。しかし、OCamlコミュニティの共通点は、 ocaml代わりにutopを使うことutop 。
実際、 ocaml REPLはocamlディストリビューションによって提供されています。したがって、このREPLはコンパイラのリリース・サイクルに従います。また、いくつかの追加機能が必要な場合は、コンパイラの次のリリースを待つ必要があります。 utop説明したようにutopはディストリビューションの外にあるので、リリースサイクルはコンパイラによって制約されておらず、余分な機能が必要な場合は、 ocaml :)よりもutop中でこの機能をプッシュしようとします。
この時点(および歴史的な機能のための)OCamlのコミュニティのほとんどの人が使用することを好むutopよりocaml 。