假设我的事实数据库至少填充了:
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,但我无法弄清楚这是在做什么......
答案 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中阅读更多内容。