如何在数据库中查找所有prolog规则

Dav*_*ein 7 prolog

假设我的事实数据库至少填充了:

fact1(A) :- !, A=ok.
fact2(B) :- !, B=ok.
Run Code Online (Sandbox Code Playgroud)

如何枚举此数据库中的所有事实?理想情况下,我有一个可以使用的谓词:

?- all_rules( Head :- Tail).
Head=fact1(_G100),
Tail=(!, _G100=ok) ;
Head=fact2(_G101),
Tail=(!, _G101=ok)
....followed by all other predicates in other modules loaded...
Run Code Online (Sandbox Code Playgroud)

我发现current_predicate/1,但我无法弄清楚这实际上是做什么的......

fal*_*lse 7

这取决于您使用的精确Prolog系统.只要您想查看定义,就listing/0可以在许多系统中使用.但listing/0只打印文本.clause/2通常只适用于动态声明的谓词.


Kaa*_*rel 6

也许是这样的:

?- current_predicate(Name/Arity),
   functor(Pred, Name, Arity),
   nth_clause(Pred, Index, Ref),
   clause(Head, Body, Ref).
Run Code Online (Sandbox Code Playgroud)

阅读更多检查程序.