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

时间:2011-06-06 15:29:07

标签: prolog

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

fact1(A) :- !, A=ok.
fact2(B) :- !, B=ok.

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

?- 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...

我找到了current_predicate/1,但我无法弄清楚这是在做什么......

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:6)

也许是这样的:

?- current_predicate(Name/Arity),
   functor(Pred, Name, Arity),
   nth_clause(Pred, Index, Ref),
   clause(Head, Body, Ref).

Examining the program中阅读更多内容。