next up previous contents
Next: 1.4.4 分割コンパイルの方法 Up: 1.4 もうちょっと複雑な使い方 Previous: 1.4.2 2つのファイルの同時コンパイル/リンク

1.4.3 モジュール

では, 2つのファイルを見てみよう (図1.3参照).

  
図 1.3: nrev1.kl1,append.kl1

まず, nrev1.kl1の先頭には:- module main.と書かれているのは先程の プログラムと同様である. また, 述語mainも同様に定義されている. 最後に, app:append(...)と書かれているのに注意すること.

次にappend.kl1を見ると最初には:- module app.と書かれており, 先程の記述とは異なっている.

KL1では複数のファイルに定義された述語を互いに利用することができる. しかしながら, いくつものファイルを別々に記述すると, 気がつかないうちに複数のファイルで同じ述語名が使われる可能性がある. これは, どの述語を呼び出すべきか分からなくなるので都合が悪い.

KLICシステムで使用できるKL1プログラムは モジュールという単位で 複数の述語を1まとめにすることができる. 通常は1つのファイルが1つの モジュールとなる. モジュールにはあとで区別できるように名前を つけておく必要がある (この名前を 「モジュール名」という). 実は, 先頭にある :- module mainという宣言は, 「このファイルのモジュール名はmainだよ」ということを宣言していたので あった.

ほかのモジュールの述語を呼び出そうとする場合には, その呼び出し先の 述語にモジュール名も添える必要がある

モジュール名:述語

たとえば, モジュール app の述語 append(...) を他のモジュー ルから呼び出すためには, app:
[1]append(...)
とすれば良 い. これで, どのモジュールに定義された述語を呼び出そうとしているのか を明確にすることができる. したがって, 同じ名前 (で違う動作をするよう な) 述語を複数のモジュールで定義してしまっても, 区別がすることができる.

この「モジュール」の取扱はklicシステム で最初に呼び出される述語についても同様である. 「klicで最初に呼び出される述語は述語main」 であることを既に説明したが, これは若干不正確で, 実はモジュールmainにある述語mainを呼び出すことになっている.

モジュールについて整理すると, 以下のようになる.



next up previous contents
Next: 1.4.4 分割コンパイルの方法 Up: 1.4 もうちょっと複雑な使い方 Previous: 1.4.2 2つのファイルの同時コンパイル/リンク



KLIC