在Prolog中导出相同谓词的模块

时间:2019-05-09 13:58:21

标签: prolog swi-prolog

我有很多Prolog文件,每个文件都包含一个唯一命名的模块。所有模块都输出相同的谓词集。现在,我想在主模块中使用多个模块中相同的谓词子集。如何在SWI-Prolog中做到这一点?

这是我想要达到的目标的一个最小的虚拟示例。

模块a:

:- module(a, [f/2]).
f(0,1) :- !.
f(N,R) :- 
   N1 is N-1, 
   f(N1,R1), 
   R is N*R1.

模块b:

:- module(b, [f/2]).
f(0, 1) :- !.
f(1, 1) :- !.
f(N, R) :- 
   N1 is N - 1, 
   N2 is N - 2, 
   f(N1, R1), 
   f(N2, R2), 
   R is R1 + R2.

两个模块都定义并导出谓词f / 2。现在,在主模块中,我想同时使用模块a中的f和模块b中的f。但是,添加

:- use_module(a).
:- use_module(b).
主模块中的

给出错误(“无权重新定义模块”)。

我想我正在寻找类似于Java中存在的“合格导入”的东西,在其中写af(8,X)和bf(8,X)会在两个调用之间产生区别(a和b会然后是其他软件包)。

我非常了解如何使用多种不同的语言进行编程,但是Prolog并不是其中一种。我很可能误解了Prolog中模块的一些基本知识。

0 个答案:

没有答案