SWI-Prolog では、モジュール テキスト ファイルの先頭に次のようなコードを使用しています。
:- module(foo, [bar/2]).
:- use_module(library(jack)).
コードを変更したくありません。それでも ECLiPSe Prolog を使用するにはどうすればよいですか (*)。module/2
ECLiPSe Prolog でディレクティブを定義するライブラリはあり
ますか?
よろしくお願いします
SWI-Prolog では、モジュール テキスト ファイルの先頭に次のようなコードを使用しています。
:- module(foo, [bar/2]).
:- use_module(library(jack)).
コードを変更したくありません。それでも ECLiPSe Prolog を使用するにはどうすればよいですか (*)。module/2
ECLiPSe Prolog でディレクティブを定義するライブラリはあり
ますか?
よろしくお願いします
SWI-Prolog モジュール システムを使用する Prolog モジュールを、Logtalk を使用して ECLiPSe (または、モジュール システムを提供しないものを含む、サポートされているその他の Prolog コンパイラ) で使用するためにコンパイルできます。
次のコードは、module/2 を module/3 ディレクティブにマップするマクロを定義します。
:- export macro((:-)/1, translate_directive/2, [top_only]).
translate_directive(
(:- module(Module, Exports)),
(:- module(Module, Exports, [swi]))
).
SWI 用に記述されたモジュールをコンパイルする前に、これをコンパイル (またはインポート) します。module/3 の 3 番目の引数には、モジュールが記述されている方言に対応する言語モジュールswi
が含まれている必要があることquintus
に注意してiso
くださいeclipse_language
。
いいえ、 と しかありませmodule/1
んmodule/3
。
ここで利用可能なすべてのリストを参照してください: http://eclipseclp.org/doc/bips/fullindex.html
ECLiPSe では、SWI-Prolog (その他)ディレクティブを+ディレクティブmodule/2
に置き換えることができます。また、SWI-Prolog と ECLiPSe の両方が、条件付きコンパイル ディレクティブとフラグをサポートしています。これにより、両方のシステムで同じ Prolog ファイルを使用するための別の (テストされていない) 別の方法が提供されます。module/1
export/1
dialect
:- if(current_prolog_flag(dialect, swi)).
:- module(foo, [p/1]).
:- elif(current_prolog_flag(dialect, eclipse)).
:- module(foo).
:- export(p/1).
:- else.
...
:- endif.