移植性があり、サポートされている 12 の Prolog コンパイラ (*) で動作する Logtalk の項拡張メカニズムを使用できます。Logtalk のコンパイルとロードおよびロード述語は、Prolog ファイルを受け入れ、対応する Prolog 拡張ファイルを出力します。たとえば、展開するファイルの名前が であり、述語の定義が という名前のファイルにあると仮定すると、次のsource.pl
ように実行できます。term_expansion/2
goal_expansion/2
expansions.pl
% first, load the expansion hooks:
| ?- [expansions].
...
% second, expand a file using those hooks:
| ?- logtalk_compile(source, [hook(user)]).
...
展開されたファイルを取得します。このファイルには (デフォルトで) 名前が付けられます( Logtalk フラグsource_pl.pl
の値に依存するディレクトリ内)。scratch_directory
拡張が Prolog モジュールに含まれている場合は、代わりにモジュール名の上に を使用しますuser
。source.pl
ファイルにプレーンな Prolog コードではなくモジュールが含まれている場合は、述語にいくつかの句を定義して、Logtalk がモジュールをオブジェクトとしてコンパイルしないようにする必要がありますterm_expansion/2
。しかし、モジュールを使用していない単純なケースでは、上記の 2 つのクエリで十分です。
{}/1
Logtalk の用語拡張メカニズムの便利な機能の 1 つは、制御構造でラップすることにより、用語または目標を拡張またはさらに拡張しないようにマークできることです。
(*) 項拡張メカニズムは標準ではなく、すべての Prolog 実装で提供されているわけではなく、実装間に大きな違いがあることに注意してください。