Is there a way to use module/2 in ECLiPSe Prolog?

浪尽此生 提交于 2020-01-25 03:39:06

问题


In SWI-Prolog, I am using code such as at the beginning of a module text file:

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

I don't want to change my code. How can I neverthelss use ECLiPSe Prolog (*). Is there some library that defines a module/2 directive in ECLiPSe Prolog?

Best Regards

(*) http://eclipseclp.org/


回答1:


The following code defines a macro that maps module/2 into module/3 directives:

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

Compile (or import) this before compiling the module written for SWI. Note that the 3rd argument of module/3 must contain a language module, corresponding to the dialect your module is written in. I have used swi here, other choices would be quintus, iso or ECLiPSe's native eclipse_language.




回答2:


You can compile Prolog module that uses SWI-Prolog module system using Logtalk for use with ECLiPSe (or any other of the supported Prolog compilers, including those that don't provide a module system).




回答3:


No, there are only module/1 and module/3.

You an see the list of all what available here: http://eclipseclp.org/doc/bips/fullindex.html




回答4:


SWI-Prolog (an others) module/2 directives can be replaced on ECLiPSe by module/1 + export/1 directives as you likely already found out. Also both SWI-Prolog and ECLiPSe support conditional compilation directives and the dialect flag. This should provide you with another alternative (not tested) for using the same Prolog files with both systems:

:- if(current_prolog_flag(dialect, swi)).

    :- module(foo, [p/1]).

:- elif(current_prolog_flag(dialect, eclipse)).

    :- module(foo).
    :- export(p/1).

:- else.

    ...

:- endif.


来源:https://stackoverflow.com/questions/22592791/is-there-a-way-to-use-module-2-in-eclipse-prolog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!