重写不带括号的布尔表达式
Rewrite Boolean Expression without Parentheses
我有一个接受布尔表达式但不支持括号的黑盒处理系统。我想输入这样的布尔表达式:
A && (B || C)
但是,当我输入为:
A && B || C
它会像我输入的那样评估表达式:
(A && B) || C
有没有什么方法可以重写我的表达式以获得不带括号的 A && (B || C) 的预期行为?谢谢!
编辑:没有左右优先,抱歉。
使用 distributive law 和 &&
的优先级来检查 A
和 B
是否都为真或 A
和 [=15] =] 是真的。
解决方案
A && B || A && C
分配律
x ^ (y v z) = (x ^ y) v (x ^ z)
x && (y || z) = (x && y) || (x && z)
function original(A, B, C) {
return A && (B || C);
}
function mySolution(A, B, C) {
return A && B || C && A;
}
console.log(original(true, true, true) == mySolution(true, true, true));
console.log(original(true, true, false) == mySolution(true, true, false));
console.log(original(true, false, true) == mySolution(true, false, true));
console.log(original(true, false, false) == mySolution(true, false, false));
console.log(original(false, true, true) == mySolution(false, true, true));
console.log(original(false, true, false) == mySolution(false, true, false));
console.log(original(false, false, true) == mySolution(false, false, true));
console.log(original(false, false, false) == mySolution(false, false, false));
优先级之间存在关系,但是您可以使用结合律和分配律来解决这个问题。
A && B || A && C
真值表匹配。
执行此操作时要小心。并非所有编译器和语言都使用相同的优先级和评估顺序。
我有一个接受布尔表达式但不支持括号的黑盒处理系统。我想输入这样的布尔表达式:
A && (B || C)
但是,当我输入为:
A && B || C
它会像我输入的那样评估表达式:
(A && B) || C
有没有什么方法可以重写我的表达式以获得不带括号的 A && (B || C) 的预期行为?谢谢!
编辑:没有左右优先,抱歉。
使用 distributive law 和 &&
的优先级来检查 A
和 B
是否都为真或 A
和 [=15] =] 是真的。
解决方案
A && B || A && C
分配律
x ^ (y v z) = (x ^ y) v (x ^ z)
x && (y || z) = (x && y) || (x && z)
function original(A, B, C) {
return A && (B || C);
}
function mySolution(A, B, C) {
return A && B || C && A;
}
console.log(original(true, true, true) == mySolution(true, true, true));
console.log(original(true, true, false) == mySolution(true, true, false));
console.log(original(true, false, true) == mySolution(true, false, true));
console.log(original(true, false, false) == mySolution(true, false, false));
console.log(original(false, true, true) == mySolution(false, true, true));
console.log(original(false, true, false) == mySolution(false, true, false));
console.log(original(false, false, true) == mySolution(false, false, true));
console.log(original(false, false, false) == mySolution(false, false, false));
优先级之间存在关系,但是您可以使用结合律和分配律来解决这个问题。
A && B || A && C
真值表匹配。
执行此操作时要小心。并非所有编译器和语言都使用相同的优先级和评估顺序。