第一部分是具有以下类型签名的评估函数:
evaluate :: Logic Expr -> [(Variable, Bool)] -> Bool
Run Code Online (Sandbox Code Playgroud)
这将逻辑表达式和赋值对列表作为输入,并根据提供的布尔赋值返回表达式的值.赋值列表是一个不同的对列表,其中每对包含一个变量及其布尔赋值.也就是说,如果传递给函数表达式A∧B并且赋值A = 1且B = 0,则函数必须返回0(这来自Digital Logic Design,0对应于false,1对应于true).
这是我到目前为止所做的事情:
type Variable = Char
data LogicExpr = V Variable
| Negation LogicExpr
| Conjunction LogicExpr LogicExpr
| Disjunction LogicExpr LogicExpr
| Implication LogicExpr LogicExpr
evaluate :: LogicExpr -> [(Variable,Bool)] -> Bool
evaluate (V a) ((x1,x2):xs) | a==x1 = x2
| otherwise = (evaluate(V a)xs)
evaluate (Negation a) l | (evaluate a l)==True = False
| otherwise = True
evaluate (Conjunction a b) …Run Code Online (Sandbox Code Playgroud) 可能重复:
条件运算符无法隐式转换?
我遇到了一种奇怪的情况,想知道我为什么要这样做.我正在使用.NET 3.5.
这有效:
short foo;
if (isValid)
foo = -1;
else
foo = getFoo();
Run Code Online (Sandbox Code Playgroud)
这不起作用:
short foo;
foo = isValid ? -1 : getFoo();
Run Code Online (Sandbox Code Playgroud)
我必须打字-1:
short foo;
foo = isValid ? (short)-1 : getFoo();
Run Code Online (Sandbox Code Playgroud)
三元表达式有何不同?它认为-1是一个需要被转换为short的int.但为什么?
我需要使用sat解算器来检查布尔表达式的可满足性.
我有像这样的复杂布尔表达式

是否有任何自动cnf文件转换器,以便我可以直接给坐在求解器?
我读了cnf格式文件..但是如何在.cnf文件中表达这个表达式?当paranthesis里面有一个连词以及如何表达时,我会感到困惑 - >和< - >?请帮我
我有一些像这样的代码
var a = returnsABoolean();
var b = returnsABoolean();
if (!a || !b) {
} else {
doStuff();
}
Run Code Online (Sandbox Code Playgroud)
我如何在if语句中反转测试,以便我可以将其重写为
var a = returnsABoolean();
var b = returnsABoolean();
if (someExpression) {
doStuff();
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我应该用什么测试替换someExpression以保留现有的行为?
一些编程语言评估
5 == true
Run Code Online (Sandbox Code Playgroud)
为真,或允许
if 5 then expr
Run Code Online (Sandbox Code Playgroud)
将5转换为bool.
朱莉娅没有.为什么?
在python中使用not()有什么问题?我试过这个
In [1]: not(1) + 1
Out[1]: False
Run Code Online (Sandbox Code Playgroud)
它工作得很好.但在重新调整之后,
In [2]: 1 + not(1)
Out[2]: SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误.订单如何重要?
我想解析.CSV文件中包含的用户值.我不希望我的用户输入"是"或"否",而是输入"True"或"False".在每种情况下,我想转换为等效的布尔值:$true或$false.理想情况下,我想要一个默认值,所以如果有错误拼写"是或"否"我将返回我的默认值:$true或$false.
因此,我想知道除了这样做之外是否还有一种巧妙的方法
if(){} else (){}
Run Code Online (Sandbox Code Playgroud) 我的方法matches1()上的逻辑表达式有问题.
SonarQube告诉我有一个错误:
(expectedGlobalRule == null && actual != null)
SonarQube: 更改此条件,使其不会始终评估为"true".条件不应无条件地评估为"TRUE"或"FALSE"
我本质上是在做这个逻辑,以避免我的"块被执行"上的NPE.
matches1()
private boolean matches1(GbRule actual, GbRule expected) {
if(actual == null && expected == null) {
return true;
} else if((expected == null && actual != null) || (expected != null && actual == null)) {
return false;
} else {
//Block to be executed
}
}
Run Code Online (Sandbox Code Playgroud)
我颠倒了逻辑,看看SonarQube会告诉我什么,他并没有抱怨它. matches2()
private boolean matches2(GbRule actual, GbRule expected) {
if(actual == null && expected == …Run Code Online (Sandbox Code Playgroud) 重构一些旧代码,我发现了以下内容:
someVar == !otherVar
Run Code Online (Sandbox Code Playgroud)
这看起来并不清晰,我认为可以写成:
someVar != otherVar
Run Code Online (Sandbox Code Playgroud)
这样做似乎是合乎逻辑的.但是,由于这是Javascript,我担心附带问题,所以这真的没问题吗?
作为任务的一部分,我们被要求创建一个非常基本/基本的程序,要求用户输入(他们是否需要咖啡或茶,大小,是否需要任何调味料),然后输出特定成本饮料,包括其名称和订购的食物,以及费用。我编写的代码非常完美;但是,我唯一的问题更多是我自己的理解。我们对客户名称的说明如下:“客户名称–仅由大小写字母组成的字符串;不能包含空格(您可以假定只包含字母)。”
因此我的代码如下:
customerName = str(input('Please enter your name: '))
if customerName.isalpha() == False:
print('%s is an invalid name, please try again!' % customerName)
else:
Run Code Online (Sandbox Code Playgroud)
然后我就从那里继续-但是,PyCharm告诉我“表达式可以简化-此检查可以检测到使用布尔文字的相等比较”,
if customerName.isalpha() == False:
Run Code Online (Sandbox Code Playgroud)
声明。简化此过程的最佳方法是什么?
java ×2
javascript ×2
logic ×2
python ×2
boolean ×1
c# ×1
casting ×1
equality ×1
haskell ×1
julia ×1
operators ×1
powershell ×1
python-3.x ×1
sat-solvers ×1
sonarqube ×1