有没有在Eclipse中的Prolog使用模块/ 2的方法吗?(Is there a way to

2019-10-19 16:03发布

在SWI-Prolog的,我使用的代码,例如在一个模块文本文件的开头:

:- module(foo, [bar/2]).
:- use_module(library(jack)).

我不想改变我的代码 。 我怎样才能neverthelss使用Eclipse的Prolog(*)。 有一些定义库module/2在Eclipse Prolog的指令?

最好的祝福

(*) http://eclipseclp.org/

Answer 1:

下面的代码定义映射模块/ 2到模块/ 3指示一个宏:

:- export macro((:-)/1, translate_directive/2, [top_only]).
translate_directive(
    (:- module(Module, Exports)),
    (:- module(Module, Exports, [swi]))
).

编译为SWI编写的模块编译之前(或进口)这一点。 需要注意的是模块/ 3的第三个参数必须包含一个语言模块 ,对应于你的模块被写入方言。我用swi这里,其他的选择将是quintusiso或Eclipse的本地eclipse_language



Answer 2:

你可以编译使用使用Logtalk与Eclipse中使用(或任何其他受支持的Prolog编译器,包括那些不提供模块系统)SWI-Prolog的模块系统的Prolog模块。



Answer 3:

没有,只有module/1module/3

你一看到所有的名单什么可以在这里找到: http://eclipseclp.org/doc/bips/fullindex.html



Answer 4:

SWI-Prolog的(一个人) 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.


文章来源: Is there a way to use module/2 in ECLiPSe Prolog?