我已将布尔函数的真值表简化为以下内容:
.pkg
修剪后的真值表:
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
我不知道如何修改创建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 :(得分:1)
将矩阵转换为代码非常简单。
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");
}
由于所有可能的输入都将导致其中一个返回被执行,因此上述内容简化为:
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.