モジュール間でのローカルな名前のエキスポートおよびインポートは、IF/Prologのコンパイラによって処理されます。コンパイラは、compiles/1述語あるいはifsem(1)コマンドによって起動します。モジュール定義を解釈する際は、他のモジュールに関するインタフェース情報(すなわち、モジュールヘッド)は、そのモジュールをコンパイルしたものから抽出されます。
モジュールのソースファイルをコンサルトあるいはリコンサルトする際に、ほとんどのコンパイラ指令は無視され、それによって導入されるべき名前の付け方の決まりも無効です。しかし、?- op と ?- predicate の指令はconsult/1とreconsult/1に実装されているので、対応するロード時の指令である :- op と :- predicate の同義語として働くようになっています。これにより、モジュールの機能が使えなくても問題のないプログラムであれば、コンサルトとコンパイルのどちらでも処理できるソースファイルになります。
さらに、
?- include(別のファイル).
により、このファイルがコンサルト・リコンサルト・コンパイルのいずれがされているかに応じて「正しいことを行なう」簡単な方法を提供しています。いずれの場合でも、「別のファイル」は、適切なメカニズムを使ってインクルードされます。これにより、モジュール機能が要求されず、トップレベルのファイルが、インタプリタとコンパイラの両方で処理されねばならない際に、プログラムをいくつかのファイルに分割することができます。
| 冒頭へ |
|