我几乎一生都在编程(大约 20 多年),我想我不记得有一次当我在看一个 if 语句并想“嗯,这将是一个很好的时机使用异或。” 整个逻辑编程领域似乎都围绕着这三个。
当然,使用 AND/OR/NOT 门,您可以做出任何其他逻辑语句。但是,有时可能会节省一些代码来将两个或三个语句组合成一个逻辑语句。让我们看看 16 种可能的逻辑连接词组合:
- FALSE = 矛盾 = 0,null,NOT TRUE
- 真 = 重言式 = 1,不假
- X = 命题 X = X
- NOT X = X 的否定 = !X
- Y = 命题 Y = Y
- 非 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 项涉及 1,第 7-10 项是我们熟悉的术语。(虽然,我们通常没有 NAND 运算符,但至少 Perl 有通用 NOT 的“除非”。)
项目 11-14 看起来很有趣,但我在编程中从未见过这些。第 15-16 项是 XOR/XNOR。
这些中的任何一个都可以用于 AND/OR/NOT 简化吗?如果有,你用过吗?
更新: “不等于”或 != 实际上是 XOR,经常使用。所以,XOR 毕竟被使用了。