自作のモジュールを使ったOCamlの実行ファイルのビルド
自作のTreeモジュールを使ってOCamlの実行ファイルをビルドしたい。
以下の手順でビルドすれば良さそう。
code:sh
$ ocamlc -c redBlack.mli # インターフェース
$ ocamlc -c redBlack.ml # 実装本体
$ ocamlc -c redBlackTest.ml # テスト
$ ocamlc -o redBlackTest redBlack.cmo redBlackTest.cmo # 実行ファイル生成
$ ./redBlackTest
10
code:tree.ml
(* 2分探索木モジュール *)
type ('a, 'b) t = Empty
| Node of ('a, 'b) t * 'a * 'b * ('a, 'b) t
(* 空の木 *)
let empty = Empty
(* 目的: tree にキー k で値が v なノードを挿入した木を返す *)
(* insert : ('a, 'b) t -> 'a -> 'b -> ('a, 'b) t *)
let rec insert tree k v = match tree with
Empty -> Node (Empty, k, v, Empty)
| Node (t1, k0, v0, t2) ->
if k = k0 then Node (t1, k, v, t2)
else
if k < k0 then Node ((insert t1 k v), k0, v0, t2)
else Node (t1, k0, v0, (insert t2 k v))
(* 目的: tree からキー k に対応する値 v を検索して返す *)
(* 見つからなければ Not_found 例外を投げる *)
let rec search tree k = match tree with
Empty -> raise Not_found
| Node (t1, k0, v0, t2) ->
if k = k0 then v0
else
if k < k0 then search t1 k
else search t2 k
code:tree.mli
(* キーが 'a 値が 'b の木 *)
type ('a, 'b) t
(* 使い方: empty *)
(* 空の木を返す *)
val empty : ('a, 'b) t
(* 使い方: insert tree key value *)
(* 木 tree にキー key と値 value を挿入した木を返す *)
val insert : ('a, 'b) t -> 'a -> 'b -> ('a, 'b) t
(* 使い方: search tree key *)
(* 木 tree の中からキー key に対応する値を返す *)
val search : ('a, 'b) t -> 'a -> 'b
code:tree_test.ml
open Tree
let () =
let tree = insert empty "a" 10 in
let n = search tree "a" in
print_int n;
print_newline ()
code:tree.mk
all: tree_test
clean:
rm -f *.cmo *.cmi *.top tree_test
%.cmi: %.mli
ocamlc -c $<
%.cmo: %.ml
ocamlc -c $<
tree_test: tree.cmi tree.cmo tree_test.cmo
ocamlc -o tree_test tree.cmo tree_test.cmo
run: tree_test
./tree_test
code:sh
$ make -f tree.mk
ocamlc -c tree.mli
ocamlc -c tree.ml
ocamlc -c tree_test.ml
ocamlc -o tree_test tree.cmo tree_test.cmo
$ ./tree_test
10