我有很多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中模块的一些基本知识。