标签: boolean-logic

使用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
查看次数

为什么名为minterms的产品名为minterms?

他们有理由这样做吗?我的意思是,在minterms的总和中,你用输出1寻找条件; 我不明白为什么他们称之为"minterms".为什么不是maxterms因为1大于0?

这背后有什么理由我不知道吗?或者我应该接受它而不问为什么?

logic boolean-logic boolean boolean-expression boolean-operations

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

在逻辑/布尔数据库字段中使用[0,1]与["Y","N"]对比["T","F"]?

只是出于好奇和缺乏明确的答案......

我只是查看从第三方发送给我们的一些数据,他们的"性别"字段是[0,1],表示女性(0)或男性(1).

有没有更好的理由使用[0,1]而不是["F","M"]?

它取决于场景和场地与其价值之间的直观性吗?

数据访问速度和/或大小限制?

如果月亮满了?


使用[0,1]与["Y","N"]与["T","F"]的区别是什么?

database-design boolean-logic boolean

11
推荐指数
3
解决办法
2461
查看次数

Prolog初学者 - 这是一个坏主意吗?

我正在处理的应用程序是各种各样的"配置器".它是用C#编写的,我甚至编写了一个规则引擎来配合它.这个想法是有一堆命题逻辑语句,用户可以进行选择.根据他们选择的内容,其他一些项目变得必需或完全不可用.

命题逻辑语句通常采用以下形式:

A => ~X 
ABC => ~(X+Y) 
A+B => Q 
A(~(B+C)) => ~Q A <=> B
Run Code Online (Sandbox Code Playgroud)

符号:

=>  -- Implication
<=> -- Material Equivalence
~   -- Not
+   -- Or
Two letters side-by-side -- And
Run Code Online (Sandbox Code Playgroud)

我对Prolog很新,但似乎它可以为我处理所有"规则处理",允许我摆脱目前的规则引擎(它可以工作,但它不是那么快或容易按照我的意愿保持).

此外,所有可用选项都属于层次结构.例如:

Outside
   Color
      Red
      Blue
      Green
   Material
      Wood
      Metal
Run Code Online (Sandbox Code Playgroud)

如果暗示了第二级(特征,如颜色)的项目,则必须选择第三级的项目(选项,例如红色).同样,如果我们知道某个功能是假的,那么它下面的所有选项也都是假的.

问题在于每个产品都有自己的一套规则.设置包含这些运算符作为谓词的知识库是一种合理的方法,然后在运行时开始构建产品的所有规则吗?

我想象它可能会起作用的方式是建立组件,功能和选项的想法.然后设置then之间的关系(例如,如果该功能为false,则其所有选项均为false).在运行时,添加产品的特定规则.然后将所有用户的选择传递给一个函数,检索哪些项为真,哪些项为假.

我不知道我所要求的所有含义,因为我刚刚进入Prolog,但我正试图避免走上一条糟糕的道路,并在此过程中浪费大量时间.

一些问题可能有助于针对我想要找到的内容:

  1. 这听起来有效吗?
  2. 我吠叫错了树吗?
  3. 尝试在运行时创建所有这些规则有任何缺点或顾虑吗?
  4. 有没有一个更好的系统来支持这种事情,我可能会挤进一个C#应用程序(Silverlight,确切地说)?
  5. 我还应该检查其他竞争系统吗?
  6. 你对这类事有什么一般的建议吗?

提前感谢您的建议!

logic boolean-logic inference rule-engine prolog

11
推荐指数
1
解决办法
638
查看次数

异或的关联性质的逻辑证明

我遇到了一个常见的编程访谈问题:给定一个无符号整数列表,找到一个在列表中出现奇数次的整数.例如,如果给出列表:

{2,3,5,2,5,5,3}
Run Code Online (Sandbox Code Playgroud)

解决方案将是整数5,因为它在列表中出现3次而其他整数出现偶数次.

我的原始解决方案包括设置一个排序数组,然后迭代数组:对于每个奇数元素,我会添加整数,而对于每个偶数元素,我会减去; 结束总和是解决方案,因为其他整数将取消.

但是,我发现只需在每个元素上执行XOR就可以实现更高效的解决方案 - 您甚至不需要排序数组!也就是说:

2^3^5^2^5^5^3 = 5
Run Code Online (Sandbox Code Playgroud)

我从Discrete Structures类回忆起,我认为Associate Property适用于XOR操作,这就是为什么这个解决方案有效:

a^a = 0
Run Code Online (Sandbox Code Playgroud)

和:

a^a^a = a
Run Code Online (Sandbox Code Playgroud)

虽然我记得Associative Property适用于XOR,但是我很难找到特定于XOR的这个属性的逻辑证明(因特网上的大多数逻辑证据似乎更侧重于AND和OR操作).有谁知道为什么关联属性适用于XOR操作?

我怀疑它涉及包含AND和/或OR的XOR身份.

c boolean-logic proof discrete-mathematics

11
推荐指数
1
解决办法
3544
查看次数

有没有办法在Java中禁用短路评估?

说我有这样的代码:

boolean ret = a() && b() && c() && d() && e();
Run Code Online (Sandbox Code Playgroud)

通常只有在所有其他调用a() - d()返回true时才调用e().是否有一些编译器或JVM选项可以禁用短路评估,因此无论其他功能的结果如何,都会始终调用e()?

基本上我正在做大型系统的UAT并且需要测试e(),但是设置环境和场景以确保所有a(),b()等返回true是非常痛苦的...

编辑:好吧,我想使用位AND而不是逻辑可以提供某种解决方法,但理想情况下我正在寻找一个不需要在源代码中进行任何更改的解决方案.两者都是由于正式和技术原因(正如我提到的系统很大,我们有整个过程,在暂存区域和签署之间推广和部署代码).这仅用于测试,生产版本需要启用延迟评估(即使用&&)

验尸报告:

  • "正确"答案是:不,没有.
  • "有用"答案:您可以将&&更改为&
  • "我到底做了什么"回答:远程调试系统,在表达式上放置断点并告诉eclipse运行e()-_-

java boolean-logic semantics

11
推荐指数
3
解决办法
2471
查看次数

Python的布尔函数优化器包

我想以表格形式定义一个布尔函数(带有n个输入和m个输出).我想找到一个实现该函数的最佳布尔表达式.这里的最优意味着,在硬件中实现它将需要尽可能少的门(可能每个门具有不同的成本)

我确信VHDL/Verilog合成器经常进行这种优化,我基本上也是出于同样的原因需要它.有某种卡诺求解器吗?或者,是否可以将问题指定为经典优化问题(SAT,整数编程)?我想用Python实现它,所以我主要是寻找一个已经完成这个的包.

python hardware optimization boolean-logic

10
推荐指数
1
解决办法
1103
查看次数

隐含Haskell模式匹配中的相等性

我正在编写一个函数来简化布尔表达式.例如,Nand(A, A) == Not(A).我试图使用模式匹配来实现这个特定的规则,如下所示:

-- Operands equivalent - simplify!
simplify (Nand q q) = Not (simplify q)
-- Operands must be different, so recurse.
simplify (Nand q q') = Nand (simplify q) (simplify q')
Run Code Online (Sandbox Code Playgroud)

编译后,我收到错误:

Conflicting definitions for `q'
Bound at: boolean.hs:73:21
          boolean:73:29
In an equation for `simplify'
Run Code Online (Sandbox Code Playgroud)

我想我明白发生了什么,我已经解决了,但我只是想知道:

  1. 为什么这种模式匹配不可能?
  2. 是否有惯用的解决方法?

完全披露:这与家庭作业有关,但课程的目的不是要学习Haskell,而是我已经以自己的方式解决了这个问题.

haskell boolean-logic pattern-matching

10
推荐指数
2
解决办法
2825
查看次数

是否可以使用XOR来检测多个条件中的一个是否正确?

例如,

if (bool1 ^ bool2 ^ bool3 ^ bool4)
{
    // Do whatever
}
Run Code Online (Sandbox Code Playgroud)

只有在满足其中一个条件时才应执行.

java boolean-logic xor

10
推荐指数
1
解决办法
230
查看次数

将"或"逻辑与多个"if case"语句一起使用

假设我有一个带有关联值的枚举案例,以及该枚举类型的两个变量:

enum MyEnum {
    case foo, bar(_ prop: Int)
}

let var1 = MyEnum.foo
let var2 = MyEnum.bar(1)
Run Code Online (Sandbox Code Playgroud)

如果我想检查两个变量是否与关联值的一般情况匹配,我可以用逗号来做:

if case .bar = var1, case .bar = var2 {
    print("both are bar")
}
Run Code Online (Sandbox Code Playgroud)

但是,我需要检查,如果两种情况相匹配,像这样的东西:

if case .bar = var1 || case .bar = var2 {
    print("at least one is bar")
}
Run Code Online (Sandbox Code Playgroud)

但是,这不编译.是否有另一种方法来编写这个以使逻辑工作?

enums boolean-logic swift associated-value

10
推荐指数
4
解决办法
1273
查看次数