重写没有括号的布尔表达式

时间:2018-01-30 19:32:26

标签: boolean boolean-logic boolean-expression

我有一个黑盒处理系统,它接受布尔表达式,但不支持括号。我想输入一个像这样的布尔表达式:

A && (B || C)

然而,当我输入时:

A && B || C

它评估表达式,就像我输入了一样:

(A && B) || C

有没有办法重写我的表达式以获得A&&的理想行为? (B || C)没有括号?谢谢!

2 个答案:

答案 0 :(得分:0)

编辑:没有左右优先,对不起。

使用distributive law&&的优先级检查AB是否为真,或同时AC是的。

解决方案

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));




答案 1 :(得分:0)

优先级之间存在关联,但您可以使用关联和分配法来解决此问题。

A && B || A && C

真相表匹配。

实施时要小心。并非所有编译器和语言都使用相同的优先级和评估顺序。