如果 A 或 B 为真,则 A XOR B 如果为真,但不能同时为真。这是它的真值表:
A | B | A XOR B
------+------ |---------
false | false | false
false | true | true
true | false | true
true | true | false
将该真值表写为 Prolog 谓词:
% A B | A XOR B
% ----- ----- | -------
xor( false , false , false ) .
xor( false , true , true ) .
xor( true , false , true ) .
xor( true , true , false ) .
然后它只是在列表中递归它的简单母题。当列表折叠为单个元素时,它会成功,[true]
否则会失败:
xor_list( [ A,B | T ] ) :- xor(A,B,C) , xor_list( [C|T] ) .
xor_list( [ true ] ) .
这都可以折叠成一个更小/更简单的谓词:
xor_list( [ false , false | T ] ) :- xor_list( [ false | T ] ) .
xor_list( [ false , true | T ] ) :- xor_list( [ true | T ] ) .
xor_list( [ true , false | T ] ) :- xor_list( [ true | T ] ) .
xor_list( [ true , true | T ] ) :- xor_list( [ false | T ] ) .
xor_list( [ true ] ) .