Objective Caml 3.05
Objective Caml 3.05をbuildする[2002.08.03]
Objective Caml 3.05(以下では、OCamlと記述する)がreleaseされたので、buildしてみる。
OCamlはMeta Language(以下では、MLと略記する)と呼ばれる関数型のプログラム言語の一種であり、大学などのプログラミング言語教育などで良く使われている。Meta Language言語は、歴史的には証明支援システムの記述言語として開発されたものである。
OCamlはインタプリタおよびコンパイラが実装されており、移植性も良く、名前の通りObject指向も採り入れられている。
NetBSD-1.5.2/i386上で、OCaml-3.05をbuildする手順は以下の通りである。
- ソースファイルを展開する。
$ tar zxf ~/ocaml-3.05.tar.gz
- ファイルINSTALLを良く読む。
$ cd ocaml-3.05
$ more INSTALL
- configureする。
$ ./configure -prefix /usr/gnu
- ocamlバイトコードコンパイラをbuildする。
$ make world
- ocamlコンパイラで自分自身をコンパイルして不動点を得る。
$ make bootstrap
- ocamlネイティブコードコンパイラをbuildする。
$ make world.opt
- installする。
$ umask 022
$ su
# make install
# exit
- make cleanする。
$ make clean
ML言語の面白いところは、λ-CalculusのCombinatorが素直に記述できて、そのままλ式として計算(eval)できることである。
OCamlで、簡単なCombinatorであるI=λx.x, K=λxλy.x, S=λxλyλz.xz(yz)を定義して、SKKなどを計算すると、以下のようになる。
OCamlの文法はメジャーなML言語の1つであるStandard MLとは細部で異なっていることに注意する。
bash-2.05a$ ocaml
Objective Caml version 3.05
# let k x y = x;;
val k : 'a -> 'b -> 'a = <fun>
# let s x y z = x z (y z) ;;
val s : ('a -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>
# let i x = x ;;
val i : 'a -> 'a = <fun>
# s k k ;;
- : '_a -> '_a = <fun>
# s k k i ;;
- : '_a -> '_a = <fun>
# s k k i 0 ;;
- : int = 0
# s k k 0 ;;
- : int = 0
# s k k 1 ;;
- : int = 1
# exit 0;;
bash-2.05a$
普段OCamlをほとんど使用していないのは、bignumやrationalがprimitiveな型として実装されてないためである。OCamlにはライブラリとして、Numモジュール(ratio型, big_int型)もあるが、入出力が不便なところに不満がある。
参考文献
- [1]Collin Myers, Chris Clack, Ellen Poon, "Programming with Standard ML", Prentice Hall International, 1993, ISBN0-13-722075-8.
- [2]Jeffrey D. Ullman(著), 神林 靖(訳), "プログラミング言語ML", アスキー出版局, 1996, ISBN4-7561-1641-8, {3301円}.
- [3]Robin Milner, Mads Tofte, Robert Harper, "The Definitions of Standard ML", MIT Press, 1990, ISBN0-262-63132-6.
Last Update: 2005.06.12 |
H.Nakao |