#!/usr/bin/env perl
use
5.14.0;
die
"Usage: solver expressions ...\n"
unless
@ARGV
;
my
$p
= Logic::Expr::Parser->new;
my
@expr
=
map
{
$p
->from_string(
$_
) }
@ARGV
;
my
$results
;
for
my
$e
(
@expr
) {
my
$ref
=
$e
->solutions(
$results
);
if
( !
defined
$results
) {
$results
=
$ref
;
}
else
{
for
my
$i
( 0 ..
$#$ref
) {
push
@{
$results
->[
$i
] },
$ref
->[
$i
];
}
}
}
my
%a2s
=
map
{ refaddr(
$Logic::Expr::atoms
{
$_
} ) =>
$_
}
keys
%Logic::Expr::atoms
;
my
$bools
=
join
','
,
map
{
$a2s
{ refaddr \
$_
} }
@Logic::Expr::bools
;
say
join
"\t"
,
$bools
,
@ARGV
;
for
my
$ref
(
@$results
) {
print
join
','
,
map
{
$_
?
'T'
:
'F'
} @{
shift
@$ref
};
say
"\t"
,
join
"\t"
,
map
{
$_
?
'T'
:
'F'
}
@$ref
;
}