如何在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输入的情况吗