Вы должны добавить в файл checkContradictory (по крайней мере, в gnuprolog) следующим образом:
yourfile.lp
comment(person, book, positive).
comment(person, book, negative).
checkContradictory:- checkCommentContradiction, ... others checking predicates
checkCommentContradiction:-comment(Person, Thing, positive),
comment(Person, Thing, negative),throw(contradiction_with_comments).
Так что, если вы хотите проверить файл перед запросом, просто выполнить свой checkContradictory или если у вас есть основной предикат, просто добавьте checkContradictory как требование.
Важно, если вам нужно иметь да безошибочны и исключение, когда есть противоречие вам нужно добавить FindAll:
yourfile.lp
comment(person, book, positive).
comment(person, book, negative).
checkFreeOfContradictory:- checkAllCommentsContradictions.
checkAllCommentsContradictions:-findall(X,checkCommentContradiction,R).
checkCommentContradiction:-comment(Person, Thing, B1),
comment(Person, Thing, B2),
(B1==B2->true;throw(contradiction_with_comments)).
В основном потому, что тот же факт будет объединен с комментарий (Лицо, вещь, B1) и комментарий (Person, Thing, B2).
* когда * вы хотите обеспечить соблюдение правила? 'комментарий (P, O, C), комментарий (P, O, D), C \ = D, throw (invalid_comment) .' – CapelliC
@CapelliC он не работает, как я ожидал. Я пытаюсь поместить его в файл, так что это будет противоречиво после загрузки его в Консоль. Но это не так. – augu