#!/usr/bin/perl -w
exec "perldoc $0" unless @ARGV;
$_ = shift;
$, = " ";
s/([a-z]+)/\$$1/ig;
@a{/(\$\w+)/g} = 1;
@v = sort keys %a;
($t="@v | $_") =~ s/\$//g;
s/<=>/==/g;
s/=>/<=/g;
($l=$t) =~ s/./-/g;
print "\n\t$t\n\t$l\n";
eval join "",(map{"for $_ (0,1){"}@v),"print \"\\t@v | \",((",$_,")?1:0),\"\\n\"","}"x@v, "\n";
print "\n";
=head1 ttable - Print truth table of a logical proposition
Prints the truth table of a logical proposition in which variable names
consist of any number of consecutive letters, true is 1, false is 0,
and operators are
Not ! And && Or ||
in that order of precedence. You may also use
Then => Iff <=>
B<but their precedence is greater than that of "!" and they cannot be
chained>.
=head2 EXAMPLES
>> ttable 'A && (B || A)'
A B | A && (B || A)
---------------------
0 0 | 0
0 1 | 0
1 0 | 1
1 1 | 1
>> ttable '(B && (B || A)) <=> B'
A B | (B && (B || A)) <=> B
-----------------------------
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 1
=head1 AUTHOR Etienne Grossmann E<lt>etienne@cs.uky.eduE<gt>
If you have never seen unreadable code, read this program's.
=cut
syntax highlighted by Code2HTML, v. 0.9.1