このディレクトリの索引
#  twitter_by_@ari_st_20120509
#
#  *バグめも ・andがand,or,xorを内包する論理演算ができない ・xorがandを内包すると xor(and(t, t), ~) のときの結果が逆 ・or(xor(f,t),f)がfalse、or(xor(t,f),f)がfalse
#  *続 ・or(or(f,t),t)がtrue、or(or(f,t),f)がfalse ・xor(or(t, f), t)がtrue、xor(or(t, f), f)がfalse ・xor(f,xor(t,f))がfalse、xor(t,xor(t,f))がtrue #ありさとメモ
#  ORとXORは内包してる論理演算の方を無視して真理値だけの方の値と同じものを答えてる感。。。(´・ω・`)
#  or(xor(hoge1, hoge2), xor(hoge3, hoge4))系はhoge1~4がどのような組み合わせでも全部false(だと思われる
#  Prologわからん・・・・・これどうやったらいいの・・・・・
#  


or(A,B) :- A,B.
or(A,B) :- \+(A),B.
or(A,B) :- A,\+(B).
or(A,B) :- \+(A),\+(B),fail.

xor(A,B) :- A,B,fail.
xor(A,B) :- \+(A),B.
xor(A,B) :- A,\+(B).
xor(A,B) :- \+(A),\+(B),fail.

and(A,B) :- A,B.
and(A,B) :- \+(A),B,fail.
and(A,B) :- A,\+(B),fail.
and(A,B) :- \+(A),\+(B),fail.

not(A) :- A,!,fail.
not(A).

nand(A,B) :- A,B,fail.
nand(A,B) :- \+(A),B.
nand(A,B) :- A,\+(B).
nand(A,B) :- \+(A),\+(B).