kprolog K-Prolog Compiler Version 6.0

モジュール機能とスコープ規則

モジュールとは、述語のスコープ規則を規定するプログラムの単位です。あ る述語が consultされたとき (または、assertされたとき)、 そのときの現在のモジュールにその述語は所属します。たとえば、
   :- module foomodule.
   foo(x):- foobar(x).
   foobar(bar).
を読み込んだとき、述語foo/1 と foobar/1 は foomodule に属し、 他のモジュールから見えなくなります。述語foo/1 を他のモジュー ルから見えるようにするためには、
   :-public foo(_).
を、module宣言の後に書いておきます。 これで foo は他のモジュールから実行できます。public宣言されている述語を publicな述語といいます。

module(M)は、Mが変数ならば、現在のモジュール名を問い合わせ てMと単一化します。Mがアトムならば副作用として現在のモジュール名 をMに変更します。 モジュールは、2047個まで指定できます。最初はモジュール public になっています。
モジュールpublic は特殊なモジュールで、このモジュールに属する述 語はすべてpublic宣言されているとみなされます。したがって、すべて のプログラミングを publicモジュール内で行えば、モジュール機能のな い処理系と同じことになります。組込み述語はモジュールpublic にあり ます。 publicでない述語の名前が、 他のモジュールの publicな述語の名前と 衝突した場合、モジュール内の述語の方だけがそのモジュールでは見えます。 したがって組込み述語と同名の述語を public 以外のモジュールの中に につくることができます。

clauselistingcurrent_predicateなど、 述語を扱う組込み述語は、 現在のモジュールに属する述語だけを参照します。 したがって、モジュール宣言されたプログラムを開発するときには、その モジュールに入っておく方が便利な場合があります。

              
   11: ?- module foobar.
   yes
   12: ?- module M.
   M = foobar
   13: ?- listing.
   foo : - foobar.
   foobar.
   yes


一つ上に戻る 目次に戻る