% ocaml Objective Caml version 3.11.1 # 1 + 2 * 3;; - : int = 7 # print_string "abc\n";; abc - : unit = () #対話モードでは、ユーザの入力に応じて OCaml処理系が計算を行い、結果の値 とその型を表示する。(計算結果だけでなく、型も表示するところが、 OCaml らしいところである。)
# はプロンプトであり、上記の最初の例では、1 + 2 * 3;; が入力 であり、7 が結果の値、int がその型である。2つ目の例では、print_string "abc\n";; が入力であり、その実行の際に abc という文字列が表示される。 (実際には abc という文字列のあとに改行コードが出力されている。) この場合、計算結果は無意味な値 () であり、その型は unit である。
この2つの計算だけでも、 「型」とは何か、 - (マイナス)の記号は何だろう、等々の疑問がわいてきたと思うが、 それらは後述するか各自調べてもらうことにして、 ここでは、処理系の終了方法をチェックしておこう。
OCamlを終了したい時は、 正式には #quit ;; と入力するが、もっと簡単に、 control-D (control キーを押しつつ "D" を押す) を入力してもよい。 なお、shell から control-Z を入力することにより、 OCaml処理系を中断することもできるが、多数の OCaml処理系プロセスを中断した ままでいると、計算機に大きな負荷をかけてしまうことがある。
# #use "myprogram.ml";;OCamlプロンプトが # なので読みにくいが、上記のものは、 プロンプトの後に、#use "myprogram.ml" というコマンドを入力したものである。 このようにすると、(現在の directory の下にある) "myprogram.ml" というファイルを読み込み、上から順番に実行してくれる。 なお、絶対パスを記述することもできる。
# #use "/export/home/kam/ocaml/myprogram.ml";;
このファイル myprogram.ml には、OCaml の式を何個でも記述してよい。 ただし、計算がエラーとなる式が途中に1つでもあると、読み込みを終了して しまう。
区切りとしての ;; についての注意. 対話モードで入力するときは、 1つの式を入力し終わるごとに ;; (セミコロンを2つ連続)をタイプする必要が あるのに対して、ファイルにたくさんの式を続けて書く時には、 (もし、OCaml処理系が区切りを自動的に認識できるなら) ;; で区切る必要はない。 この理由により、本実験で提供するソースコードでは、;; で区切っていない 式たちもときどき登場する。 このようなコードを、対話モードで直接入力してテストしようと思ったら、 当然、;; で区切る必要があるので注意されたい。
なお、xxx.mlというファイルを編集するとき、TAB キーを押すと、 適切なインデントをしてくれる。
OCamlの対話モードでの実行速度は十分速いので、 本実験の範囲では、対話モードだけが使えればまったく問題ない。 しかし、実行速度をさらに上げたいときは、 コンパイラを使ってコンパイルすることもできる。
コンパイルするコマンドは ocamlc である。 ネイティブコンパイラを使ってコンパイラする場合は ocamlopt である。 これらの詳細については、参考文献を参照せよ。 [2010/09/03, ocamlc と ocamlopt の説明を修正]
OCamlの処理系は、Linux などの Unix系統のOSの上だけでなく、 Windows でも動作させることができる。本実験は、情報科学類計算機室に おいて遂行することが必要であるが、プログラム言語は、 気軽に使えることが大事であるので、興味をもった人は、 是非、自分の持っているPC等にインストールして楽しんでほしい。 必要な情報は、 OCaml の開発元のページ を見るか、あるいは、インターネットで、インストール方法の ガイドが書いてあるページを探して欲しい。
亀山 幸義