标签: boolean-expression

布尔表达式的等价性

我有一个问题,包括比较布尔表达式(OR是+,AND是*).更准确地说,这是一个例子:

我有以下表达式:"A + B + C",我想将它与"B + A + C"进行比较.比较像字符串不是一个解决方案 - 它会告诉我表达式不匹配当然是假的.关于如何比较这些表达式的任何想法?

关于如何解决这个问题的任何想法?我接受任何建议,但(作为注释)我的应用程序中的最终代码将用C++编写(C当然接受).

正常表达式也可以包含括号:

(A*B*C)+ DA + B*(C + D)+ X*Y.

提前致谢,

尤利安

c c++ language-agnostic boolean-expression

5
推荐指数
2
解决办法
2144
查看次数

Python:函数参数的多个可能值

我继承了一些看起来像这样的Python代码:

name = 'London'
code = '0.1'
notes = 'Capital of England'
ev = model.City(key=key, code=code, name=name or code, notes=notes)
Run Code Online (Sandbox Code Playgroud)

本着学习的精神,我想知道这个name or code论点是怎么回事.这是说'使用,name如果它不为空,否则使用code'?

提供这样的多个可能参数的技术术语是什么,所以我可以在Python文档中阅读它?

谢谢!

python boolean-expression

5
推荐指数
2
解决办法
1570
查看次数

无法弄清楚C程序中的逻辑错误

一个程序,每行打印一个输入的单词.

int main() {

    int c;

    while ((c=getchar()) != EOF) {

        if (c== ' ' || c== '\n' ||c == '\t')
                putchar('\n');
        else {
            putchar(c);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序正确打印结果,每行一个字.在相应地改变条件之后,我期望下面的程序也每行打印一个单词.但是我没有得到正确的结果.我犯了一些愚蠢的错误还是错了?

int main() {

    int c;

    while ((c=getchar()) != EOF) {

        if (c != ' ' || c != '\n' || c != '\t')
            putchar(c);
        else {
            putchar('\n');
        }
    }

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

c logic boolean-logic boolean-expression

5
推荐指数
1
解决办法
837
查看次数

仅使用AND布尔运算转换函数

我有一些功能

(A and ( B or c)) or (D and E and (F or H or R or P )))
Run Code Online (Sandbox Code Playgroud)

并且我想将该函数转换为仅与函数一起运行(当然,如果可能的话)我发现使用DeMorgan的定律可以进行某种转换,但我没有设法将这个函数转换为任何想法?

我知道那个功能

!(A or B) is equal to function !A and !B
Run Code Online (Sandbox Code Playgroud)

但是我找不到与上面相同的功能

logic boolean-logic boolean boolean-expression boolean-operations

5
推荐指数
1
解决办法
1万
查看次数

拆箱如何在短路布尔表达式中工作?

我最近尝试运行以下两段代码,并对输出感到惊讶.

第一:

// ...
System.out.println( (Boolean)null || true );
// ...
Run Code Online (Sandbox Code Playgroud)

第二:

// ...
System.out.println( (Boolean)null || false );
// ...
Run Code Online (Sandbox Code Playgroud)

第一个示例导致以下输出:
true

第二个示例导致以下输出:    com.blah.main
中线程"main"java.lang.NullPointerException
中的异常(SanityCheck.java:26)

我原以为这两个例子都会导致空指针异常,因为任何短路都是从左到右应用的.从布尔值中取消装箱布尔值的尝试应该在逻辑的另一侧或考虑之前失败.

谁能解释这种不一致的行为?

java primitive unboxing boolean-expression primitive-types

5
推荐指数
1
解决办法
1157
查看次数

为什么〜(真的是真的)不是真的吗?布尔运算符(否定)适用于`unsigned char`s,但不适用于bools?(C++)

我听说除了0以外通常"一切"都是真的.但现在我发生了很奇怪的事情......或者我只是认为我这样做是正确的,而我却没有.这是发生了什么:

当我要检查,如果一个相当于b,我可以使用NOT(a XOR b).例如,当我检查它时unsigned char,一切都很好

unsigned char a = 5;
unsigned char b = 3;
unsigned char c = ~(a^b);
Run Code Online (Sandbox Code Playgroud)

给了我c == 249:

a是:00000101,即5.

b是:00000011,即3.

〜(a ^ b)是:11111001,即249.

现在,让我们试试吧bool.

cout << ~(true^true) << ~(true^false) << ~(false^true) << ~(false^false) << endl;
cout << ~(~(true^true)) << ~(~(true^false)) << ~(~(false^true)) << ~(~(false^false)) << endl;

if (~(true^true) == true)
    cout << "true";
else …
Run Code Online (Sandbox Code Playgroud)

c++ boolean boolean-expression boolean-operations

5
推荐指数
2
解决办法
381
查看次数

在C或C++中在位图上高效执行布尔表达式

在C或C++中对位图执行布尔表达式的最有效方法是什么?例如,假设我有一个4位位图(a, b, c, d).现在,让我们说我有一个简单的布尔表达式(a AND b) OR (c AND d).我应该如何表示布尔表达式,以便我可以有效地将它应用于我的位图?我正在寻找一个可以应用于任何布尔表达式的通用解决方案,而不仅仅是作为示例给出的一个.换句话说,我要寻找一些方法来"编译"布尔表达式为可以用来有效地减少我的位图转换成布尔另一个数据结构.

位图结构是对数据库记录进行过滤操作的结果.每个记录都有自己的位图,位图中的每个位都是单个过滤规则的结果.布尔表达式用于组合这些过滤规则,以确定记录是否应包含在数据库查询的结果中.最多可以有64个单独的过滤规则可以通过布尔操作进行组合,因此unsigned long long int如果需要,可以将位图表示为a .

解决方案在速度方面应该是高效的,不应该改变位图结构.布尔表达式为另一种结构的转化不必是存储器效率也不快,因为它可以(至少在我的当前使用情况)被高速缓存.使用转换后的布尔表达式减少位图应该既快又高效.

笔记:

  • 布尔表达式仅使用嵌套的AND和OR运算(无IF语句).
  • 该解决方案应该假定64位CPU的可用性.
  • 解决方案不应取决于CPU(除了64位寻址).
  • 解决方案不应假设任何其他特定硬件(例如 GPU)的可用性.
  • 所有位图都在内存中.
  • 可能存在大量的位图(数十亿).
  • 位图一次更新一个.

c c++ boolean-expression bitmapdata

5
推荐指数
1
解决办法
726
查看次数

检查字符串是否包含字母字符以外的字符

TRUE如果字符串只包含字母,我想要一个函数返回,FALSE否则.

即使有很多其他语言的答案页面,我也很难使用R找到这个问题的解决方案.

r boolean-expression

5
推荐指数
1
解决办法
5106
查看次数

Spark上的动态集代数

考虑以下问题.鉴于:

  1. 集合的集合
  2. 它们的动态接收的布尔表达式

返回结果集.

Spark有没有任何有效的算法或库来解决这个一般问题?

这是一个玩具示例,用于概念性地说明问题:

val X  = Set("A1", "A2", "A3", "A4")
val Y  = Set("A2", "A4", "A5")

val collection = Set(X, Y)
val expression = "X and Y"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种实现通用的方法,solve_expression以便在上面的例子中:

output = solve_expression(expression, collection)
Run Code Online (Sandbox Code Playgroud)

结果是:

Set("A2", "A5")
Run Code Online (Sandbox Code Playgroud)

我正在处理具有数百万项的集合,以及作为字符串的布尔表达式.重要的是表达式中的每个原子(例如上面的"X"和"Y")都是集合.表达式和集合是动态的(操作不能硬编码,因为我们将它们作为输入接收,我们事先不知道它们是什么).

我对问题的表现很灵活.实际集合可以是类型Set,例如保持字符串(例如"A1","A2"),编码为二进制向量,或任何使其适合Spark的其他集合.

Spark有没有任何库来解析解决集合上的一般布尔表达式?

scala set boolean-expression apache-spark pyspark

5
推荐指数
1
解决办法
117
查看次数

PostgreSQL是否会短路其BOOL_OR()评估?

EXISTSCOUNT(*)它可以短路更快

很多时候,我喜欢检查SQL中存在的东西.例如,我这样做:

-- PostgreSQL syntax, SQL standard syntax:
SELECT EXISTS (SELECT .. FROM some_table WHERE some_boolean_expression)

-- Oracle syntax
SELECT CASE 
  WHEN EXISTS (SELECT .. FROM some_table WHERE some_boolean_expression) THEN 1 
  ELSE 0 
END
FROM dual
Run Code Online (Sandbox Code Playgroud)

在大多数数据库中,EXISTS"短路",即一旦找到一行,数据库就可以停止在表中查找行.这通常比比较快得多,COUNT(*) >= 1正如本博文中所见.

使用EXISTSGROUP BY

有时,我想在GROUP BY查询中为每个组执行此操作,即我想"聚合"存在值.没有EXISTS聚合函数,但PostgreSQL幸运地支持BOOL_OR()聚合函数,就像在这个语句中一样:

SELECT something, bool_or (some_boolean_expression)
FROM some_table
GROUP BY something
Run Code Online (Sandbox Code Playgroud)

COUNT(*)由于计算计数所需的明显顺序扫描,文档提到了一些缓慢的问题.但不幸的是,它并没有说明BOOL_OR()被短路的事情.是这样的吗?BOOL_OR()一旦遇到第一个TRUE …

sql postgresql boolean-logic exists boolean-expression

5
推荐指数
1
解决办法
1390
查看次数