假设我的事实数据库至少填充了:
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,但我无法弄清楚这实际上是做什么的......
也许是这样的:
?- current_predicate(Name/Arity),
functor(Pred, Name, Arity),
nth_clause(Pred, Index, Ref),
clause(Head, Body, Ref).
Run Code Online (Sandbox Code Playgroud)
阅读更多检查程序.