Как найти все правила пролога в базе данных - PullRequest
7 голосов
/ 06 июня 2011

Предположим, у меня есть база данных фактов, заполненная по крайней мере:

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 ]

7 голосов
/ 07 июня 2011

Это зависит от конкретной системы Prolog, которую вы используете.Пока вы только хотите взглянуть на определения, listing/0 работает во многих системах.Но listing/0 печатает только текст.clause/2 часто работает только для предикатов, объявленных динамически.

6 голосов
/ 06 июня 2011

Может быть, что-то вроде этого:

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

Подробнее в Изучение программы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...