有哪些可能的编程方法来简化 If 条件(重写条件)


What are the possible programatic ways to simplify the If Conditions (re-write Condition)

我有一个 if 条件if(abc==xyz AND (xyz==jkl OR abc==jkl)) .

我如何使用给我非括号条件的代码重写此表达式,即类似

if(xyz==jkl OR abc==jkl  AND abc==xyz)`

对于基本表达式,我们可以使用前缀符号,其中基于运算符的优先级并借助堆栈我们可以解决它。但我只想重写条件,以便找到哪个会给出与带括号的输出相同的输出。

您可以从将

条件转换为 DNF 开始,使用 AND 的优先级高于 OR 的事实:

if (abc==xyz AND xyz==jkl OR abc==xyz AND abc==jkl)

看看第二部分,这可能会改写为

if (abc==xyz AND xyz==jkl OR abc==xyz AND xyz==jkl)

现在你可以看到这两个部分是相同的,真的,即我们可以简化为

if (abc==xyz AND xyz==jkl)

有趣的事实:如果表达式无法简化,您还可以利用优先级规则将||AND结合起来:

if (abc==xyz AND xyz==jkl || abc==jkl)

不是说我会推荐它。

如果特别要求这个条件,如果 abc,xyz,jkl 彼此相等,则表示为 true

所以

if(abc==jkl AND abc==xyz).

如果您正在寻找实验,请参阅运算符优先级表 http://php.net/manual/en/language.operators.precedence.php