コンパイラはユ−ザが指定した(拡張子'.pro'のある)Prologのソースコードファイルを入力とし、拡張子'.sem'のあるファイルを出力として生成します。
特定の述語は完全にコンパイルされるか、あるいは完全にインタプリトされるかのどちらかでなければなりません。ある1つの述語の数節をコンパイルし、残りをインタプリトすることはできません。1つのファイル中のいくつかの述語をコンパイルし、残りをインタプリトすることは可能ですし、それが望ましい場合もあります。
以下の述語は、自分自身を変更するのでコンパイルすることができません。この述語がコンパイルされ実行された場合には、not_modifiableという例外メッセ−ジが出されます。
p(x) :- asserta(p(a)).
通常、コンパイラは1つのファイルで定義されたすべての述語についての最適化コ−ドを生成します。predicate/1という指令を用いて、ある述語がコンパイルされるのを防止することができます。以下の例ではnew_colleague/1はコンパイルできますが、動的に変更可能なcolleague/1はコンパイルできません。 この述語は、ファイルがロードされるとコンサルトされるように処理され、呼び出された時にインタプリトされます。
?- predicate(colleague/1).
colleague('Peter'). colleague('Anne').
new_colleague(Name) :- asserta(colleague(Name)), ...
| scroll to top |
|