1

在 SWI-Prolog 中,我使用了模块文本文件开头的代码:

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

我不想更改我的代码。我怎样才能永远使用 ECLiPSe Prolog (*)。是否有一些库 module/2在 ECLiPSe Prolog 中定义指令?

此致

(*) http://eclipseclp.org/

4

4 回答 4

2

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

于 2014-03-23T19:30:35.160 回答
1

以下代码定义了一个将 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这里使用过,其他选择是quintusiso或者 ECLiPSe 的 native eclipse_language

于 2014-03-24T00:19:12.387 回答
0

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.
于 2014-03-23T22:44:14.587 回答
0

不,只有module/1module/3

您可以在此处查看所有可用内容的列表:http: //eclipseclp.org/doc/bips/fullindex.html

于 2014-03-23T17:43:02.520 回答