如何从Prolog中的文件中定义/加载所有子句
我正在使用SWI Prolog,并且惊讶地发现在Prolog中没有明显的方法来实现这一点。我想要的是类似于子句/2的东西,但允许未实例化的第一个参数(并且特定于给定文件中的子句,即我不想要整个Prolog库!)。这是我写的查找所有条款的内容如何从Prolog中的文件中定义/加载所有子句,prolog,swi-prolog,Prolog,Swi Prolog,我正在使用SWI Prolog,并且惊讶地发现在Prolog中没有明显的方法来实现这一点。我想要的是类似于子句/2的东西,但允许未实例化的第一个参数(并且特定于给定文件中的子句,即我不想要整个Prolog库!)。这是我写的查找所有条款的内容 clauseX(H,B) :- current_predicate(P/Arity), functor(H,P,Arity), absolute_file_name('filname.pl', AbsFileName), pr
clauseX(H,B) :-
current_predicate(P/Arity),
functor(H,P,Arity),
absolute_file_name('filname.pl', AbsFileName),
predicate_property(H, file(AbsFileName)),
clause(H,B).
有更简洁的方法吗?好的,所以我可以稍微缩短它,前两个文本不是必需的,这将返回文件filename.pl中的子句
clauseX(H,B) :-
absolute_file_name('filname.pl', AbsFileName),
predicate_property(H, file(AbsFileName)),
clause(H,B).
然而,我仍然担心它的效率,以及它是否必须在每次调用clauseX时查阅文件。请注意,大多数Prolog系统只允许在动态谓词上使用
子句/2
。在最新SWI Prolog版本的特定情况下,只要将保护\u static\u code
标志设置为false
,就可以对静态谓词使用子句/2
。