如果我有这样的产品总和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
他们有理由这样做吗?我的意思是,在minterms的总和中,你用输出1寻找条件; 我不明白为什么他们称之为"minterms".为什么不是maxterms因为1大于0?
这背后有什么理由我不知道吗?或者我应该接受它而不问为什么?
logic boolean-logic boolean boolean-expression boolean-operations
只是出于好奇和缺乏明确的答案......
我只是查看从第三方发送给我们的一些数据,他们的"性别"字段是[0,1],表示女性(0)或男性(1).
有没有更好的理由使用[0,1]而不是["F","M"]?
它取决于场景和场地与其价值之间的直观性吗?
数据访问速度和/或大小限制?
如果月亮满了?
我正在处理的应用程序是各种各样的"配置器".它是用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,但我正试图避免走上一条糟糕的道路,并在此过程中浪费大量时间.
一些问题可能有助于针对我想要找到的内容:
提前感谢您的建议!
我遇到了一个常见的编程访谈问题:给定一个无符号整数列表,找到一个在列表中出现奇数次的整数.例如,如果给出列表:
{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身份.
说我有这样的代码:
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而不是逻辑可以提供某种解决方法,但理想情况下我正在寻找一个不需要在源代码中进行任何更改的解决方案.两者都是由于正式和技术原因(正如我提到的系统很大,我们有整个过程,在暂存区域和签署之间推广和部署代码).这仅用于测试,生产版本需要启用延迟评估(即使用&&)
验尸报告:
我想以表格形式定义一个布尔函数(带有n个输入和m个输出).我想找到一个实现该函数的最佳布尔表达式.这里的最优意味着,在硬件中实现它将需要尽可能少的门(可能每个门具有不同的成本)
我确信VHDL/Verilog合成器经常进行这种优化,我基本上也是出于同样的原因需要它.有某种卡诺求解器吗?或者,是否可以将问题指定为经典优化问题(SAT,整数编程)?我想用Python实现它,所以我主要是寻找一个已经完成这个的包.
我正在编写一个函数来简化布尔表达式.例如,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)
我想我明白发生了什么,我已经解决了,但我只是想知道:
完全披露:这与家庭作业有关,但课程的目的不是要学习Haskell,而是我已经以自己的方式解决了这个问题.
例如,
if (bool1 ^ bool2 ^ bool3 ^ bool4)
{
// Do whatever
}
Run Code Online (Sandbox Code Playgroud)
只有在满足其中一个条件时才应执行.
假设我有一个带有关联值的枚举案例,以及该枚举类型的两个变量:
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)
但是,这不编译.是否有另一种方法来编写这个以使逻辑工作?