A XOR B如果真,如果A或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 ]) .
「謂語返回真時列表在第一個n-1元素中包含false,或者如果最後一個元素爲True。「 - 請澄清XOR列表是什麼意思,根據該描述[true,false,false]應該返回false(前n-1個元素不全是假,最後一個元素爲false) – Bond
對不起!我剛剛編輯了正確的方式 – user3074510