标签: boolean-logic

重构布尔表达式的工具

我正在寻找一个重构布尔表达式的工具.我有像这样的表情

a1 => (b1 <=> c or d) AND 
a2 => (b2 <=> c or d) AND
a2 => (b2 <=> c or d) 
Run Code Online (Sandbox Code Playgroud)

该工具应该能够简化表达式,例如在上面的例子中提取子表达式"c或d".是否有免费的计算机代数系统可以做到这一点?

目前我想手动重构表达式,用一点haskell quickcheck脚本证明等价.

refactoring boolean-logic boolean-expression

6
推荐指数
1
解决办法
2065
查看次数

更换位范围

CS中的任何二年级学生应该能够回答什么,但我似乎无法绕过它......

我有一组位,我需要用不同的集替换一些位.在一个简化的例子中:

10101010 - 原始位设置

00001111-显示替换位置的掩码

00001100 - 新的位值

10101100 - 结果位设置

另一个例子:

10101010 - 原始位设置

00110011 -mask

11111111 - 新的比特值

10111011 - 结果位设置

通过迭代比特来做到这一点是微不足道的.

是否可以使用布尔逻辑(AND,OR等)来做到这一点?

boolean-logic mask bit

6
推荐指数
1
解决办法
1120
查看次数

为什么我不能在字节上做布尔逻辑?

在C#(3.5)中,我尝试以下方法:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
Run Code Online (Sandbox Code Playgroud)

我得到错误132:"不能隐式地将类型'int'转换为'byte'.存在显式转换(你是否错过了演员?)".|也是如此 和^.

我究竟做错了什么?为什么要问我关于整数?为什么我不能在字节上做布尔逻辑?

.net c# byte boolean-logic

6
推荐指数
1
解决办法
2344
查看次数

使用AND,OR和NOT进行mysql查询

让我们说我有一个与主题有很多关系的文章表.分配给每个文章主题具有type其可以含有1〜3中的值字段AND,NOTOR.

Articles
   id
   ....

Topics
   id
   ....

ArticleTopics
   article_id
   topic_id
   type
Run Code Online (Sandbox Code Playgroud)

我想创建一个查询,说明返回所有文章:

ALL of the following topics: 1, 2, 3 (AND association)
   AND
ANY of the following topics: 4, 5, 6 (OR association)
   AND
NONE of the following topics 7, 8 (NOT association)
Run Code Online (Sandbox Code Playgroud)

如何创建此查询?

提前致谢!

mysql boolean-logic boolean

6
推荐指数
1
解决办法
3076
查看次数

为缓存原因规范化布尔表达式.有没有比真值表更有效的方法?

我当前的项目是一个带有布尔检索功能的高级标签数据库.正在使用类似的布尔表达式查询记录(例如在音乐数据库中):

funky-music and not (live or cover)
Run Code Online (Sandbox Code Playgroud)

这应该会产生音乐数据库中所有时髦的音乐,但不能播放歌曲的现场或封面版本.

当涉及到缓存时,问题是存在等同但结构不同的查询.例如,应用de Morgan的规则,上面的查询可以这样写:

funky-music and not live and not cover
Run Code Online (Sandbox Code Playgroud)

例如,当通过散列查询字符串实现缓存时,它将产生完全相同的记录,但会产生中断缓存.

因此,我的第一个目的是创建查询的真值表,然后可以将其用作缓存键,因为等效表达式构成相同的真值表.不幸的是,这是不切实际的,因为真值表随着输入(标签)的数量呈指数增长,我不想限制一个查询中使用的标签数量.

另一种方法可以是遍历语法树,应用由布尔代数定义的规则来形成(最小的)规范化表示,这似乎也很棘手.

因此,整体问题是:是否有一种实用的方法来实现等效查询的识别,而无需电路最小化或真值表(编辑:或任何其他NP难的算法)?

ne plus ultra将识别已经缓存的子查询,但这不是主要目标.

algorithm caching boolean-logic traversal normalization

6
推荐指数
1
解决办法
1894
查看次数

是否有任何按位运算符法?

根据代数定律的思考,我想知道在比特操作领域是否存在任何官方指导线,类似于代数.

代数例子

a - b =/= b - a

让我们a = 7b = 5

  • a - b = 2
  • b - a = -2

让我们a = 10b = 3

  • a - b = 7
  • b - a = -7

因此if a > b,b - a将是负面的等价物a - b.因此,我们可以

|a - b| = |b - a|.

其中|x|表示绝对值x.

按位示例

a | b =/= a …

computer-science boolean-logic proof bitwise-operators

6
推荐指数
1
解决办法
2711
查看次数

Python逻辑表达式中的奇怪转换

我注意到Python 2.7逻辑表达式的奇怪行为:

>>> 0 and False
0
>>> False and 0
False
>>> 1 and False
False
>>> False and 1
False

并用True代替False

>>> 0 and True
0
>>> True and 0
0
>>> 1 and True
True
>>> True and 1
1

Python将逻辑语句转换为整数时是否有任何规则?为什么有时会显示0为假,1为真?

更重要的是,为什么会归还这个?

>>>"test" or "test"
'test'

python evaluation boolean-logic python-2.7

6
推荐指数
1
解决办法
184
查看次数

GLSL/HLSL - 与单个块相对的多个单行条件语句

对抗锯齿方法做了一些研究,我偶然发现了这段代码(从Nvidia的FXAA着色器中抓取):

if(!pairN) lumaN = lumaS;
if(!pairN) gradientN = gradientS;
if(!pairN) lengthSign *= -1.0;
Run Code Online (Sandbox Code Playgroud)

是不是有一个很好的理由不是作为以下内容写的?

if (!pairN) {
    lumaN = lumaS;
    gradientN = gradientS;
    lengthSign *= -1.0;
}
Run Code Online (Sandbox Code Playgroud)

我认为这是某种优化?看起来真的违反直觉......

opengl boolean-logic gpu glsl hlsl

6
推荐指数
1
解决办法
1441
查看次数

是'或'在赋值pythonic的右侧使用?

情况

(注意:以下情况仅仅是示例性的.这个问题适用于任何可以评估为bool的事情)

如果用户未提供自定义列表,则应使用默认列表:

default_list = ...
custom_list = ...
if custom_list:
    list = custom_list
else:
    list = default_list
Run Code Online (Sandbox Code Playgroud)

你可以缩短到:

default_list = ...
custom_list = ...
list = custom_list if custom_list else default_list
Run Code Online (Sandbox Code Playgroud)

现在,根据https://docs.python.org/2.7/reference/expressions.html#or ...

表达式x or y首先评估x; 如果x,则返回其值; 否则,将评估y并返回结果值.

...,or不返回布尔值,而是返回布尔转换不为false的第一个值.因此,以下是有效的代码:

list = custom_list or default_list
Run Code Online (Sandbox Code Playgroud)

这与C#Null Coalescing运算符类似,不同之处在于它应该作为False Coalescing Operator在Python中重新生成,它返回第一个非false参数.

最后一个例子似乎更容易阅读,但它被认为是pythonic?

无论PEP8(程序),也不pylint的不抱怨.

python boolean-logic coding-style conditional-operator language-lawyer

6
推荐指数
2
解决办法
290
查看次数

使用Python在逻辑字符串中获取"AND"中的元素

我想解析逻辑字符串并获得"和"逻辑中所有元素的组合.例如,对于字符串'(A和(B或C))'我应该得到[[A,B],[A,C]]和字符串'(A和B以及(C或D和F)或者F和G)'我应该[[A,B,C],[A,B,D,F],[F,G]].

我正在尝试使用pyparsing.在这篇文章之后,在这里以二叉树方式解析pyparsing中的复杂逻辑表达式,我设法得到一个嵌套列表,其中字母按照首选项分组("和"优先于"或",括号覆盖此):

import pyparsing as pp

complex_expr = pp.Forward()
vars = pp.Word(pp.alphas, pp.alphanums + "_") | pp.Regex(r"[+-]?\d+(:?\.\d*)?(:?[eE][+-]?\d+)?").setName('proteins')
clause = pp.Group(vars ^ (pp.Suppress("(") + complex_expr + pp.Suppress(")") ))

expr = pp.operatorPrecedence(clause,[
                            ("and", 2, pp.opAssoc.LEFT, ),
                            ("or", 2, pp.opAssoc.LEFT, ),])
#print expr
complex_expr << expr
parseresult=complex_expr.parseString('( A and B and ( C or D and F ) or F and G )')
print parseresult
Run Code Online (Sandbox Code Playgroud)

这使:

[[[['A'],'和',['B'],'和',[[['C'],'或',[['D'],'和',['F ']]]]],'或',[['F'],'和',['G']]]]]

现在我该如何处理这个结果来实现所需的输出?我会很乐意帮助你.我试过pyparsing但我对其他可能更好的模块开放.

提前致谢.

python boolean-logic pyparsing

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