6 use List::Util qw(reduce);
9 has rule_set => (is => 'lazy', handles => [ 'add_rule' ], builder => sub {
13 has facts => (is => 'ro', required => 1);
16 my ($self, $vars, @terms) = @_;
17 my $rule_set = $self->rule_set;
18 my $head = reduce { $b->but(next => $a) }
19 reverse map $rule_set->expand(@$_), @terms;
20 my $state = DX::State->new(
26 facts => $self->facts,
27 rule_set => $rule_set,
28 )->assign_vars(map +($_ => {}), @$vars);
29 return DX::ResultStream->new(