如何使用Prolog中几个模块共享相同名称的谓词

use*_*379 8 prolog swi-prolog

我是Prolog的新手,我正在使用SWI-Prolog来解决以下问题.我有几个文件dataBase1.pl,dataBase2.pl...具有相同的结构(基于此线程)

:- module(dataBase1,[]).

:- use_module(library(persistency)).

:- persistent 
       predicate1(A:any, B:any),
       predicate2(A:any, B:any).

:- initialization(init).

init :-
        absolute_file_name('dataBase1.db', File, [access(write)]),
        db_attach(File, []).
Run Code Online (Sandbox Code Playgroud)

predicate1/2, predicate2/2 对所有数据库文件都是通用的.

然后,我在第三个文件中定义了predicates.pl几个使用以前数据库中的子句的子句,例如testPredicate(A,B) :- predicate1(A,B), predicate2(A,B).

我的问题是我希望predicate1/2, predicate2/2从与数据库文件对应的所有模块中使用上面的子句.在当前状态下,我需要精确上下文模块才能使用 predicate1/2, predicate2/2(即dataBase1:predicate1/2, dataBase2:predicate1/2,....)

我无法使用,use_module/1因为我将动态添加/删除数据库文件.

提前感谢任何建议!

编辑:在评论中讨论之后,如何将表单的可查询谓词定义head(X,Y) :- body()为持久动态谓词?

Ant*_*lov 1

iirc,您应该使用模块名称作为前缀来调用谓词,并用冒号分隔。

http://www.swi-prolog.org/pldoc/man?section=overrule