如何在perl中实现这一点,快捷方式truthtable
我将布尔函数的真值表简化为:如何在perl中实现这一点,快捷方式truthtable,perl,truthtable,Perl,Truthtable,我将布尔函数的真值表简化为: A B C1 C2 Z --------------------------------- 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0
A B C1 C2 Z
---------------------------------
0 0 0 0 1
0 0 0 1 1
0 0 1 0 1
0 0 1 1 1
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 1
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0
sub Z {
my ($C2, $C1, $B2, $B1, $A) = @_;
return 1 if $C2 && $C1;
return 1 if $B2 && $B1;
return 1 if $A;
return 0;
}
修剪后的真值表:
A B C1 C2 Z
---------------------------------
0 0 0 x 0
x x x 0 0
1 x x 1 1
x 1 x 1 1
x x 1 1 1
我不知道如何修剪真值表,创建x而不是1或0。将矩阵转换为代码非常简单
sub Z {
my ($C2, $C1, $B2, $B1, $A) = @_;
return 1 if $C2 && $C1;
return 1 if $B2 && $B1;
return 1 if $A;
return 0 if !$C2 && !$B1 && !$A;
return 0 if !$C1 && !$B1 && !$A;
return 0 if !$C2 && !$B2 && !$A;
return 0 if !$C1 && !$B2 && !$A;
croak("Should never be reached");
}
由于所有可能的输入将导致执行其中一个返回,因此上述内容简化为:
A B C1 C2 Z
---------------------------------
0 0 0 0 1
0 0 0 1 1
0 0 1 0 1
0 0 1 1 1
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 1
1 0 0 0 1
1 0 0 1 1
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0
sub Z {
my ($C2, $C1, $B2, $B1, $A) = @_;
return 1 if $C2 && $C1;
return 1 if $B2 && $B1;
return 1 if $A;
return 0;
}
我们可以很容易地把它写成一行
my $Z = $C2 && $C1 || $B2 && $B1 || $A; # If $Z needs to be true or false.
my $Z = $C2 && $C1 || $B2 && $B1 || $A ? 1 : 0; # If $Z needs to be 0 or 1 specifically.
欢迎来到堆栈溢出。当您在此处创建帐户时,建议您使用并阅读页面,以便熟悉该网站。在这里发布下一个问题之前,请这样做。好吧……如果1,0,0,1->1和1,0,0,0->1,那么1,0,0,x->1……以及类似的其他组合。您只需遍历它们,并跟踪哪些变量是多余的…@xxfelixxx非常感谢您的代表!^ ^,你能告诉我n输入的情况吗