标签: boolean-logic

如何构建真值表生成器?

我正在寻找一个真理表生成器作为个人项目.

这里这里有几个基于网络的在线网站.

替代文字
(Example screenshot of an existing Truth Table Generator)

我有以下问题:

  • 我应该如何解析如下表达式:((P => Q)&(Q => R))=>(P => R)
  • 我应该使用像ANTLr或YACC这样的解析器生成器,还是使用直接的正则表达式?
  • 一旦我解析了表达式,我该如何生成真值表?表达式的每个部分都需要划分为最小的组件,并从表的左侧重新构建到右侧.我该如何评价这样的东西?

任何人都可以向我提供有关解析这些任意表达式并最终评估解析表达式的提示吗?

c# parsing boolean-logic parser-generator truthtable

14
推荐指数
1
解决办法
9662
查看次数

存储逻辑规则的适当数据结构和数据库模式是什么?

前言:我没有规则引擎,构建规则,建模规则,实现规则的数据结构等等方面的经验.因此,我不知道我在做什么,或者我在下面尝试的是什么.

我正在试图弄清楚如何存储和处理以下假设情景.为了简化我的问题,假设我有一种用户购买对象的游戏类型,其中可能有1000个可能的对象,并且必须按指定的顺序购买对象,并且只能在特定的组中购买.例如,假设我是用户并且我想购买对象F.在我购买对象F之前,我必须先前购买了对象A OR(B和C).我不能同时购买F和A,也不能购买F和B. 它们必须符合规则指定的顺序.先是,然后是F.或者,首先是B,C,然后是F. 我现在并不关心购买之间的时间跨度,或用户的任何其他特征,只是它们是现在的正确顺序.

为潜在的数千个对象存储此信息的最佳方法是什么,这些对象允许我读取所购买对象的规则,然后根据用户以前的购买历史记录进行检查?

我试过这个,但我一直试图实现A OR(B和C)这样的分组.我想将规则存储在我拥有这些表的数据库中:

 Objects
    (ID(int),Description(char)) 

ObjectPurchRules
    (ObjectID(int),ReqirementObjectID(int),OperatorRule(char),Sequence(int)) 
Run Code Online (Sandbox Code Playgroud)

但显然,当您处理结果时,如果没有分组,您将得到错误的答案.如果可能,我想避免过多的字符串解析:).一个对象可能具有未知数量的先前所需购买.用于处理规则的SQL或伪代码片段将不胜感激.:)

database boolean-logic rule-engine

14
推荐指数
1
解决办法
8473
查看次数

如果所有列值都为true,则返回true

在PostgreSQL中有一种更快的方法来基本上在几行中执行if吗?

说我有一张桌子

ticket | row | archived
1      | 1   | true
1      | 2   | true
1      | 3   | true
2      | 1   | false
2      | 2   | true
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以在ticket =的列下面做一个if语句?因此,ticket = 1的地方是真的

true && true && true = true
Run Code Online (Sandbox Code Playgroud)

并且ticket = 2将是假的,因为

false && true = false
Run Code Online (Sandbox Code Playgroud)

或者我应该坚持下去

SELECT ( (SELECT COUNT(*) FROM table WHERE ticket = 1)
       = (SELECT COUNT(*) FROM table WHERE ticket = 1 AND archived = true) )
Run Code Online (Sandbox Code Playgroud)

sql postgresql boolean-logic exists aggregate-functions

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

13
推荐指数
2
解决办法
4万
查看次数

仅使用按位运算符实现逻辑否定(除了!)

~ & ^ | + << >> 是我可以使用的唯一操作

在我继续之前,这是一个功课问题,我已经坚持了很长时间.

我原来的方法:我认为!x可以用两个补码完成,并用它的加法逆做一些事情.我知道xor可能在这里,但我真的不知道如何处理这个问题.

为了记录:我也不能使用条件,循环==等,只能使用上面提到的函数(按位).

例如:

!0 = 1
!1 = 0
!anything besides 0 = 0
Run Code Online (Sandbox Code Playgroud)

c boolean-logic bit-manipulation negation

13
推荐指数
3
解决办法
2万
查看次数

简化布尔表达式算法

有人知道一个简化布尔表达式的算法吗?

我记得布尔代数和Karnaught地图,但这适用于EVERITHING为布尔值的数字硬件.我想要考虑一些子表达式不是布尔值的东西.

例如:

a == 1 && a == 3
Run Code Online (Sandbox Code Playgroud)

这可以转换为纯布尔表达式:

a1 && a3 
Run Code Online (Sandbox Code Playgroud)

但这是表达是不可简化的,而对于算术的一点点知识,everibody可以确定表达式只是:

false
Run Code Online (Sandbox Code Playgroud)

有些人知道一些链接?

algorithm boolean-logic boolean boolean-expression

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

(4> y> 1)是C++中的有效语句吗?如果是这样,你如何评价?

这是一个有效的表达吗?如果是这样,你能改写它以使它更有意义吗?例如,它是一样的(4 > y && y > 1)吗?您如何评估链式逻辑运算符?

c++ conditional boolean-logic if-statement logical-operators

13
推荐指数
2
解决办法
3226
查看次数

C#按位等于bool运算符

C#中的布尔值是1个字节的变量.并且因为bool是Boolean类的快捷方式,我希望覆盖&=,| =操作以使它们使用布尔类型,但我不太确定它.没有像&& =|| =那样的东西.

这是我的问题,做的事情如下:

bool result = condition;
result &= condition1;
result &= condition2;
Run Code Online (Sandbox Code Playgroud)

会工作,但这只是因为bool将为00000000表示false00000001表示true或者因为bool类下面会使用类似&& =|| =的东西来调用前一个?使用以前的符号实际上是安全的还是更好用

bool result = condition;
result = result && condition1;
result = result && condition2;
Run Code Online (Sandbox Code Playgroud)

避免任何奇怪的行为?

请注意,条件可能类似于A> = B或任何其他可能会返回bool的检查.

c# boolean-logic boolean bitwise-operators

13
推荐指数
1
解决办法
7162
查看次数

只要数组C++,就可以在一个语句中比较布尔变量

假设我有一个布尔数组,其中5个bool变量都为真

bool boo[10];
for(int i = 0; i < 5; i++){
    boo[i] = true;
}
Run Code Online (Sandbox Code Playgroud)

我希望它们一次比较到一个NAND逻辑门,因为我的问题是如果我总是比较两个变量并将合并的布尔值与i + 1布尔变量进行比较.这给出了错误的结果.

    bool NANDGate(bool array[]){
    bool at;
    for(int i = 1; i < 5; i++){
        if(i == 1){
            at = !(array[i-1] && array[i]);
        }else{
            at = !(at && array[i]);
        }
    }
    return at;
}
// result here is true even though it should be false
Run Code Online (Sandbox Code Playgroud)

当我将每个变量从boo放入NAND门时,我想要的是一个正确的结果,所以这可能是这样的:

bool func(bool array[]){
// some loop
result = !(array[0] && array[1] && array[2] && array[3] && array[4]);
return …
Run Code Online (Sandbox Code Playgroud)

c++ boolean-logic c++11

13
推荐指数
4
解决办法
621
查看次数

使用XOR在括号前移出

如果我有这样的产品总和z*a + z*b + z*c + ... + z*y,就可以z在括号之前移动因子,这是相同的:z(a + b + c + ... y).

我想知道如果使用按位XOR而不是乘法,可能(如果是)可以做同样的技巧. z^a + z^b + ... z^y -> z^(a + b + ... + y)

a, b, c ...在添加之前,或许应该进行预处理,例如逻辑否定或其他内容?z可能会发生变化,因此如果需要,预处理不应该依赖于特定的z价值.

c++ boolean-logic multiplication logical-operators boolean-operations

12
推荐指数
1
解决办法
2967
查看次数