在SWI-Prolog中,我正在使用诸如开头的代码 模块文本文件:
:- module(foo, [bar/2]).
:- use_module(library(jack)).
我不想更改我的代码。我怎样才能使用它
ECLiPSe Prolog(*)。是否有一些库定义了一个
ECLiPSe Prolog中的module/2
指令?
最好的问候
答案 0 :(得分:2)
您可以使用Logtalk编译使用SWI-Prolog模块系统的Prolog模块,用于ECLiPSe(或任何其他受支持的Prolog编译器,包括那些不提供模块系统的编译器)。
答案 1 :(得分:2)
以下代码定义了一个将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
,其他选项将是{{1} },quintus
或ECLiPSe的原生iso
。
答案 2 :(得分:1)
不,只有module/1
和module/3
。
您可以在此处查看所有可用内容的列表:http://eclipseclp.org/doc/bips/fullindex.html
答案 3 :(得分:1)
SWI-Prolog(其他)module/2
指令可以通过module/1
+ export/1
指令在ECLiPSe上替换,如您可能已经发现的那样。 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.