私は人生のほぼすべて (約 20 年以上) をプログラミングしてきましたが、if ステートメントを見て「うーん、これは良い機会だろう」と思ったのは一度も思い出すことができないと思います。 XORを使用してください。」論理プログラミングの世界全体は、これら 3 つだけを中心に展開しているようです。
確かに、AND/OR/NOT ゲートを使用すると、他の論理ステートメントを作成できます。ただし、コードを節約して 2 つまたは 3 つのステートメントを 1 つの論理ステートメントに結合できる場合もあります。論理接続詞の可能な 16 の組み合わせを見てみましょう。
- FALSE = 矛盾 = 0、null、NOT TRUE
- TRUE = トートロジー = 1、NOT FALSE
- X = 命題 X = X
- NOT X = X の否定 = !X
- Y = 命題 Y = Y
- NOT Y = Y の否定 = !Y
- X AND Y = 結合 = NOT (X NAND Y)
- X NAND Y = 代替拒否 = NOT (X AND Y)、!X OR !Y
- X OR Y = 選言 = NOT (!X AND !Y)
- X NOR Y = 共同拒否 = NOT (X OR Y)、!X AND !Y
- X ⊅ Y = 重要な非含意 = X AND !Y, NOT(!X OR Y), (X XOR Y) AND X, ???
- X ⊃ Y = 重要な意味 = !X OR Y, NOT(X AND !Y), (X XNOR Y) OR X, ???
- X ⊄ Y = 逆非含意 = !X AND Y, NOT(X OR !Y), (X XOR Y) AND Y, ???
- X ⊂ Y = 逆含意 = X OR !Y, NOT(!X AND Y), (X XNOR Y) OR Y, ???
- X XOR Y = 排他的論理和 = NOT (X IFF Y)、NOT (X XNOR Y)、X != Y
- X XNOR Y = 二条件 = X IFF Y, NOT (X XOR Y), !X AND !Y
したがって、項目 1 ~ 2 には変数が含まれず、項目 3 ~ 6 には変数が含まれ、項目 7 ~ 10 は私たちがよく知っている用語です。(ただし、通常、NAND 演算子はありませんが、少なくとも Perl には、普遍的な NOT の「unless」があります。)
項目 11 から 14 は興味深い項目のように見えますが、これらはプログラミングで見たことがありません。項目 15 ~ 16 は XOR/XNOR です。
これらのいずれかを AND/OR/NOT 簡略化に使用できますか? もしそうなら、あなたはそれらを使ったことがありますか?
更新:「等しくない」または != は実際には XOR であり、常に使用されます。というわけで、やっぱりXORが使われています。