Как ввести следующие данные в прологе? - PullRequest
0 голосов
/ 14 декабря 2009
not(A()) and not(D()) and not(B()) and not(A()).

Какой правильный путь?

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Если вы просто пытаетесь оценить утверждение логики высказываний, используя PROLOG, вы можете попробовать следующее. Начните с кодирования значений ваших «предложений» a, b и d, таких как:

a :- true. % this means that a is true.

b :- fail. % this means that b is false

... и т.д.. Например, предполагая, что ваши заявления были:

a :- fail.
b :- fail.
d :- fail.

Затем, выполняя ваше заявление:

?- not(a), not(b), not(d), not(a).
true.

н.б .: «Предложения», закодированные здесь, являются «симулированными» - они на самом деле являются предикатами нулевого арта первого порядка в отношении PROLOG.

пс. a :- true. можно упростить до a..

имп. Если я не в курсе, и вам нужен способ символической манипуляции с оператором в какой-то другой форме, например, нормализации, тогда вам нужно написать то, что называется мета-интерпретатором в PROLOG. , См. Программирование Clocksin и Mellish в Прологе, Приложение B, «Списки программ форм Клаусала» , которые могут вам помочь.

1 голос
/ 14 декабря 2009

Понятие логическое отрицание уже включено в Пролог в качестве средства отказа. Если ваша реализация не предоставляет его (это может случиться), вы можете думать not как

not(P) :- call(P), !, fail. 

или

not(P) :- (call(P) -> fail ; true)

Затем посмотрите на формулу, можно упростить применение not только к отдельным предикатам:

~(A & ~D) & ~B & ~A = (~A | D) & ~B & ~A = ~A & ~B

Это просто закон де Моргана и соображение о том факте, что D бесполезен для выполнимости предиката.

тогда вы можете объединить их:

final_predicate :- not(B), not(A).

РЕДАКТИРОВАТЬ: запомнить , это И, а ; ИЛИ.

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