在Prolog中构建XOR / 3

时间:2019-01-31 23:08:56

标签: prolog xor

对于/ 3命题逻辑,我有以下条款。

statement(false).
statement(true).

not(false, true).
not(true,   false).

and(false, false, false).
and(false, true,   false).
and(true,   false, false).
and(true,   true,   true).

or(false, false, false).
or(false, true,   true).
or(true,   false, true).
or(true,   true,   true).

implying(X, Y, Z) :- not(X, Not_X) , or(Not_X, Y, Z).

我该如何添加XOR子句?

2 个答案:

答案 0 :(得分:2)

您可以使用equivalences中的一个:选择第一个,(P∨Q)¬¬(P∧Q),

xor(P,Q,R) :-
    or(P,Q,O),
    and(P,Q,A),
    not(A,N),
    and(O,N,R).

您得到:

?- forall(xor(P,Q,R),writeln(xor(P,Q,R))).
xor(false,false,false)
xor(false,true,true)
xor(true,false,true)
xor(true,true,false)
true.

答案 1 :(得分:1)

这应该有效。

xor(false, false, false).
xor(false, true,  true).
xor(true,  false, true).
xor(true,  true,  false).