如何从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

我正在使用SWI Prolog,并且惊讶地发现在Prolog中没有明显的方法来实现这一点。我想要的是类似于子句/2的东西,但允许未实例化的第一个参数(并且特定于给定文件中的子句,即我不想要整个Prolog库!)。这是我写的查找所有条款的内容

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