在 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 中定义指令?
此致
您可以使用 Logtalk 编译使用 SWI-Prolog 模块系统的 Prolog 模块,以便与 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 的第三个参数必须包含一个语言 module,对应于你的模块所用的方言。我在swi
这里使用过,其他选择是quintus
,iso
或者 ECLiPSe 的 native eclipse_language
。
SWI-Prolog(an others)module/2
指令可以在 ECLiPSe 上替换为module/1
+export/1
指令,正如您可能已经发现的那样。SWI-Prolog 和 ECLiPSe 也都支持条件编译指令和dialect
标志。这应该为您提供在两个系统上使用相同 Prolog 文件的另一种选择(未经测试):
:- if(current_prolog_flag(dialect, swi)).
:- module(foo, [p/1]).
:- elif(current_prolog_flag(dialect, eclipse)).
:- module(foo).
:- export(p/1).
:- else.
...
:- endif.
不,只有module/1
和module/3
。
您可以在此处查看所有可用内容的列表:http: //eclipseclp.org/doc/bips/fullindex.html