как реализовать логические операторы в прологе - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу определить логические операторы не, или, и, nand, ни и xor в прологе

Я уже пробовал это

and(A,B) :- A,B.
or(A,B) :- A;B.
nand(A,B) :- not(and(A,B)).
nor(A,B) :- not(or(A,B)).
xor(A,B) :- or(A,B), nand(A,B).

Но я должен использовать следующеефакты:

opnot(Variable, Result).
opor(Variable1, Variable2, Restult).
opand(Variable1, Variable2, Restult).
opnand(Variable1, Variable2, Result).
opnor(Variable1, Variable2, Result).
opxor(Variable1, Variable2, Result).

Не могли бы вы помочь мне написать правила?

1 Ответ

0 голосов
/ 03 ноября 2019

Вы можете использовать предикаты, которые вы уже определили для выполнения этого.

opand/3 и все другие предикаты с арностью 3 будут определены следующим образом:

opand(Variable1, Variable2, Result) :- and(Variable1, Variable2) -> Result = true ; Result = false.

Определение opnot/2 будет немного другим:

opnot(Variable, Result) :- not(Variable) -> Result = true ; Result = false.
...