我不想说:
(trsaz != v1) && (trsaz != v2) && ...
Run Code Online (Sandbox Code Playgroud)
我想要的东西:
trsaz != (v1, v4, v7, v11)
Run Code Online (Sandbox Code Playgroud)
这是可能的还是还有别的东西!=.
在我工作的公司,最近有一项规定,所有“高度可见”的布尔逻辑都必须以析取范式表示。
例如(尽管这个概念与语言无关),
#if (defined(A) || defined( B )) || (defined(C) && defined(D))
Run Code Online (Sandbox Code Playgroud)
必须替换为:
#if defined(A) || (defined(C) && defined(D)) || defined(B)
Run Code Online (Sandbox Code Playgroud)
强制要求代码必须以这种方式表达的动机是什么?有什么优点?
我的Lua应用程序的一部分是一个搜索栏,我试图让它理解布尔表达式.我正在使用LPeg,但是当前的语法给出了一个奇怪的结果:
> re, yajl = require're', require'yajl'
> querypattern = re.compile[=[
QUERY <- ( EXPR / TERM )? S? !. -> {}
EXPR <- S? TERM ( (S OPERATOR)? S TERM )+ -> {}
TERM <- KEYWORD / ( "(" S? EXPR S? ")" ) -> {}
KEYWORD <- ( WORD {":"} )? ( WORD / STRING )
WORD <- {[A-Za-z][A-Za-z0-9]*}
OPERATOR <- {("AND" / "XOR" / "NOR" / "OR")}
STRING <- ('"' {[^"]*} '"' / "'" {[^']*} "'") -> …Run Code Online (Sandbox Code Playgroud) 我正在使用 Java 进行一些非常简单的程序分析/转换Soot在 Java 中进行一些非常简单的程序分析/转换,并且我发现自己需要对布尔表达式进行一些简单的组合。例如,在我的分析过程中,我将有一个像这样的表达式(a < 25) && (b >= 10),我想(a >=-10)通过 OR 运算符将该表达式与 结合起来以获得像这样的完整表达式(a >=-10) || (a < 25) && (b >= 10)。基本上,只是将两个布尔表达式树组合成一个表达式。我可能还希望自动将表达式树转换为树的等效连接范式版本。
我的另一个要求是当我们有可以轻松消除的表达式时能够简化表达式(如果需要,可以通过自定义代码)。例如(a < 20) || (a >= 20)简化为TRUE、since (a < 20) = (!(a >= 20)),因此我们可以随时消除一些项。
我知道编写布尔表达式树是一个经典的介绍性问题,而且我很确定我以前已经实现过它(很久以前,对于数据结构类:))我知道我可以再做一次,如果需要......但考虑到这可能是以前处理过的事情,我想知道是否有关于我应该研究的库来解决上述问题的任何建议。我讨厌重新发明轮子,因为可能已经有一个非常好的轮子了。
总而言之,我正在寻找一个具有以下功能的 Java 库:
有什么建议吗?
(注意:我不会评估这些树,因此每个节点都将是未解析的谓词,例如variable != 20or foo >= 50,因此评估不是必需的,但如果它是库的一部分,也不会造成伤害。)
我最近尝试运行以下两段代码,并对输出感到惊讶.
第一:
// ...
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)
我原以为这两个例子都会导致空指针异常,因为任何短路都是从左到右应用的.从布尔值中取消装箱布尔值的尝试应该在逻辑的另一侧或考虑之前失败.
谁能解释这种不一致的行为?
我听说除了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或C++中对位图执行布尔表达式的最有效方法是什么?例如,假设我有一个4位位图(a, b, c, d).现在,让我们说我有一个简单的布尔表达式(a AND b) OR (c AND d).我应该如何表示布尔表达式,以便我可以有效地将它应用于我的位图?我正在寻找一个可以应用于任何布尔表达式的通用解决方案,而不仅仅是作为示例给出的一个.换句话说,我要寻找一些方法来"编译"布尔表达式为可以用来有效地减少我的位图转换成布尔另一个数据结构.
位图结构是对数据库记录进行过滤操作的结果.每个记录都有自己的位图,位图中的每个位都是单个过滤规则的结果.布尔表达式用于组合这些过滤规则,以确定记录是否应包含在数据库查询的结果中.最多可以有64个单独的过滤规则可以通过布尔操作进行组合,因此unsigned long long int如果需要,可以将位图表示为a .
解决方案在速度方面应该是高效的,不应该改变位图结构.布尔表达式为另一种结构的转化不必是存储器效率也不快,因为它可以(至少在我的当前使用情况)被高速缓存.使用转换后的布尔表达式减少位图应该既快又高效.
笔记:
我正在观看一个java编程视频教程,它提到:
if(null != x){
}
Run Code Online (Sandbox Code Playgroud)
如上所述使用它是一个好习惯吗?
它有什么不同于:
if(x != null){
}
Run Code Online (Sandbox Code Playgroud) 我得到了以下卡诺图,但在计算每个表中的 XOR 表达式时仍然遇到问题。
Table 1
-------
WZ
00 01 11 10
-----------------------
00 | | | | 1 |
-----------------------
01 | 1 | | | |
-----------------------
XY 11 | | | | 1 |
-----------------------
10 | 1 | | | |
-----------------------
Table 2
-------
WZ
00 01 11 10
-----------------------
00 | | 1 | | |
-----------------------
01 | | | 1 | |
-----------------------
XY 11 | | 1 | | |
-----------------------
10 …Run Code Online (Sandbox Code Playgroud) 当我尝试使用逻辑表达式对 Pandas 数据框进行切片时,出现异常。
我的数据具有以下形式:
df
GDP_norm SP500_Index_deflated_norm
Year
1980 2.121190 0.769400
1981 2.176224 0.843933
1982 2.134638 0.700833
1983 2.233525 0.829402
1984 2.395658 0.923654
1985 2.497204 0.922986
1986 2.584896 1.09770
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 38 entries, 1980 to 2017
Data columns (total 2 columns):
GDP_norm 38 non-null float64
SP500_Index_deflated_norm 38 non-null float64
dtypes: float64(2)
memory usage: 912.0 bytes
Run Code Online (Sandbox Code Playgroud)
命令如下:
df[((df['GDP_norm'] >=3.5 & df['GDP_norm'] <= 4.5) & (df['SP500_Index_deflated_norm'] > 3)) | (
(df['GDP_norm'] >= 4.0 & df['GDP_norm'] <= 5.0) & (df['SP500_Index_deflated_norm'] < …Run Code Online (Sandbox Code Playgroud)