【问题标题】:How to find all prolog rules in database如何在数据库中查找所有序言规则
【发布时间】:2013-01-30 00:15:17
【问题描述】:

假设我有一个至少包含以下内容的事实数据库:

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,但我不知道它到底在做什么......

【问题讨论】:

    标签: prolog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      可能是这样的:

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

      Examining the program阅读更多内容。

      【讨论】:

      • 考虑functor(Pred, Name, Arity)
      • clause/2 正是我想要的!在这个例子中,我相信用clause(Head, Body) 调用它会给我Head=fact(A), Body=(!,A=ok)
      猜你喜欢
      • 2010-11-29
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      相关资源
      最近更新 更多