简化逻辑语句
Simplify logic statement
我有这个:
if(!A or (A and B)) //pseudocode
我想否定那个if语句:
这应该有效:
if(!(!A or (A and B))) //pseudocode
但我相信有一种方法可以简化它,而它现在正在逃避我。
欢迎来到 de-Morgan 的布尔代数世界,然后进行简单分布:
if(!(!A or (A and B))
=> if(!(!A) and !(A and B))
=> if(A and (!A or !B))
=> if((A and !A) or (A and !B))
=> if(A and !B)
如果你把它分解成一个真理table...
A B !A (A and B) A! or (A and B)
0 0 1 0 1
0 1 1 0 1
1 0 0 0 0
1 1 0 1 1
您可以看到除 A and !B
之外的所有情况下结果都为真,而无需 know/remember 任何布尔代数规则。 "Except" 只是 "not" 所以... !(A and !B)
...
但是,如果编写 !A or (A and B)
更符合您尝试编码的现实问题,就这样吧,除非它对性能非常关键...
我有这个:
if(!A or (A and B)) //pseudocode
我想否定那个if语句:
这应该有效:
if(!(!A or (A and B))) //pseudocode
但我相信有一种方法可以简化它,而它现在正在逃避我。
欢迎来到 de-Morgan 的布尔代数世界,然后进行简单分布:
if(!(!A or (A and B))
=> if(!(!A) and !(A and B))
=> if(A and (!A or !B))
=> if((A and !A) or (A and !B))
=> if(A and !B)
如果你把它分解成一个真理table...
A B !A (A and B) A! or (A and B)
0 0 1 0 1
0 1 1 0 1
1 0 0 0 0
1 1 0 1 1
您可以看到除 A and !B
之外的所有情况下结果都为真,而无需 know/remember 任何布尔代数规则。 "Except" 只是 "not" 所以... !(A and !B)
...
但是,如果编写 !A or (A and B)
更符合您尝试编码的现实问题,就这样吧,除非它对性能非常关键...