想象一个带有布尔标志的Person类,该布尔标志指示该人是否可以使用 - 默认情况下设置为false.
public class Person{
boolean employable = false;
...
}
Run Code Online (Sandbox Code Playgroud)
现在假设有一些外部布尔方法作用于Person对象.例如,考虑实用程序类中的静态布尔方法.
public class PersonUtil{
public static boolean ofWorkingAge(Person p){
if(p.getAge() > 16) return true;
return false;
}
...
}
Run Code Online (Sandbox Code Playgroud)
布尔静态方法本质上类似于布尔值函数,即谓词.
我们可以用谓词构造一个2 ^(#谓词)-by-#谓词真值表.例如,给定三个谓词:ofWorkingAge,ofGoodCharacter,isQualified我们可以构造以下8×3真值表:
T T T
T T F
T F T
T F F
F T T
F T F
F F T
F F F
Run Code Online (Sandbox Code Playgroud)
我们现在想雇用具有理想品质的人.让+表示我们希望考虑某人可就业(即将他们的就业能力标志设为真)和-相反.
T T T | + …
Run Code Online (Sandbox Code Playgroud) java design-patterns functional-programming truthtable java-8
我必须编写打印表达式真值表的程序.所以,我写了以下函数:
bool(true).
bool(fail).
tableBody(A,B,E) :-
bool(A),
bool(B) ,
write(A) ,
write(' '),
write(B),
write(' '),
write(E),nl, fail.
Run Code Online (Sandbox Code Playgroud)
我的问题是E(包含A和B的表达式)没有被评估,而是按原样打印.例如:
296 ?- table(A,B,and(A,B)).
A B expr(A,B)
true true and(true, true)
true fail and(true, fail)
fail true and(fail, true)
fail fail and(fail, fail)
false.
Run Code Online (Sandbox Code Playgroud)
我有兴趣编写and(true, true)
(" and(X,Y)
"是我之前定义的仿函数)的评估值,而不是当前显示的值.我想过编写一个eval仿函数,但它不会产生同样的效果吗?我怎么解决这个问题?
我正在使用SWI-Prolog 5.8.谢谢.
最初的问题是这样开始的。有6个州。在每个状态,当 w=1 时移动到下一个状态,当 w=0 时则保持当前状态。在每个状态下,使用标准 7 LED 显示屏 (BCD) 显示一个数字。这些数字是 8 -> 1 -> 9 -> 4 -> 2 -> 2。
这是我对这个问题的尝试。我从一个状态表开始:从左到右 y2,y1,y0
w=0 w=1 a b c d e f g
000|000 001 1 1 1 1 1 1 1
001|001 010 0 1 1 0 0 0 0
010|010 011 1 1 1 1 0 1 1
011|011 100 0 1 1 0 0 1 1
100|100 101 1 1 0 1 1 0 1
101|101 000 1 …
Run Code Online (Sandbox Code Playgroud) 谁能推荐可用于评估逻辑表达式的软件(最好是 Mac 版)或基于 Web 的工具?
例如,我希望能够快速测试两个表达式是否如下:
$a = 'foo';
$b = 'bar';
$c = 'foo';
( !(($a == $c) && ($b == $c)) )
// and
( ($a != $c) || ($b != c$) )
Run Code Online (Sandbox Code Playgroud)
是否可互换。
而且,对于如何构建此类表达式,是否存在普遍认可的最佳实践?例如,尝试尽量减少否定、元素顺序或类似内容的使用?
有时我发现自己在这些事情上有点挣扎:)
我正在寻找关于我学校项目的一些建议.我应该创建一个程序,它采用逻辑表达式并为其输出真值表.实际上为我创建真值表并不困难,我已经用Java编写了这些方法.我想知道java中是否有任何类可以用来解析表达式并将其放入堆栈中.如果不是,我正在寻找解析表达式的帮助.每当我尝试思考它时,它就是括号.此外,如果在任何其他语言中这样做会更容易,我会愿意这样做.Perl可能是我的下一个最好的语言.
一些例子(P && Q) - > R.
(P || Q || R)&&((P - > R) - > Q)
我想创建一个包含三个变量的所有可能组合的数组,这些变量可以是真或假(即8种可能的组合).
我试图在此图像的左上角创建立方体
所以输出应该是这样的
points = [
// first square
{
id: '000',
truths: [false, false, false]
position: [0, 0]
},
{
id: '100',
truths: [true, false, false]
position: [5, 0]
},
{
id: '010',
truths: [false, true, false]
position: [0, 5]
},
{
id: '110',
truths: [true, true, false]
position: [5, 5]
},
// second square
{
id: '001',
truths: [false, false, true]
position: [2.5, 2.5]
},
{
id: '101',
truths: [true, false, true]
position: [7.5, 2.5]
},
{
id: …
Run Code Online (Sandbox Code Playgroud) 所以我有一点顺序:
1010
1是MSB.
如果奇数位为0,我的函数需要返回0的整数,如果是1则返回1.
我不能使用任何for循环或任何性质的东西来看我是否需要返回0或1.有没有人有任何建议如何去做.
我正在考虑使用not操作,但我可以弄清楚如何使用它.
到目前为止,我正在使用1010 ... 10的序列,然后将它连接起来.这样做会让我得到1010.现在我需要知道我是否返回1或0.
是否有一个软件包(最好是应用程序,而不是库)从给定的真值表(以某种文本格式)创建精简二阶决策图(ROBDD)?
我正在努力解决Java中包含AND,OR和NOT运算符的逻辑表达式.
如果输入是TRUE
包含的变量的任何布尔值,则程序必须输出.我已成功完成,但效率不高.
我目前的解决方案如下:
为表达式中的每个变量创建一个真值表,并逐行评估.
(p ? ¬q) ? (r ? s) ? (¬p ? u)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我将用一个变量真值表来评估整个表达式p q r s
.
现在,我正在考虑实现一个类似的替代解决方案:考虑上面的例子.
我们可以注意到,即使只是解决了这个p ? ¬q
部分,所有的表达都会出现TRUE
.这为我们节省了3个额外变量的麻烦.
现在,我的问题是这个.如何在JAVA中编程?我怎么才能知道输入是否有像上面那样的模式?或者它只是一个表达式,我必须评估整个真值表?就像下面那个
(p ? ¬q) ? (r ? (s ? (¬p ? u)))
Run Code Online (Sandbox Code Playgroud) java performance truthtable logical-operators coding-efficiency
truthtable ×10
java ×3
logic ×3
arrays ×1
boolean ×1
c ×1
circuit ×1
combinations ×1
evaluation ×1
excel ×1
expression ×1
java-8 ×1
javascript ×1
karnaugh-map ×1
parsing ×1
performance ×1
perl ×1
prolog ×1
solver ×1