gpt4 book ai didi

prolog - 如何在 Prolog 中的多个模块中使用共享相同名称的谓词

转载 作者:行者123 更新时间:2023-12-03 01:38:40 25 4
gpt4 key购买 nike

我是 Prolog 新手,我在使用 SWI-Prolog 时遇到以下问题。我有几个具有相同结构的文件 dataBase1.pldataBase2.pl...(基于此thread)

:- 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, []).

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

然后,我在第三个文件 predicates.pl 中定义了几个子句,这些子句利用了先前数据库中的子句,例如 testPredicate(A,B) :- predicate1(A,B ),谓词2(A,B)。

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

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

预先感谢您的任何建议!

编辑:按照评论中的讨论,如何将 head(X,Y) :- body() 形式的可查询谓词定义为持久动态谓词?

最佳答案

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

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

关于prolog - 如何在 Prolog 中的多个模块中使用共享相同名称的谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48191936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com