follow alternative rspace entries without backtracking, explicitly resolve
[scpubgit/DX.git] / lib / DX / Proposition.pm
CommitLineData
9d759b64 1package DX::Proposition;
2
d6b0c811 3use DX::Step::ConsiderProposition;
4
9d759b64 5use DX::Class;
6
384a5e93 7has predicate => (is => 'ro', isa => Str, required => 1);
9d759b64 8
a97779a1 9has args => (is => 'ro', isa => ArrayRef[Str|Value], required => 1);
9d759b64 10
a97779a1 11has introduced_names => (is => 'ro', isa => HashRef[One], required => 1);
d1b6cb33 12
a97779a1 13has required_names => (is => 'ro', isa => HashRef[One], required => 1);
d1b6cb33 14
c25fbf05 15sub for_deparse {
16 my ($self) = @_;
17 [ statement => [
18 [ symbol => $self->predicate ],
19 map {
20 ref($_)
21 ? $_
22 : [ symbol => $self->introduced_names->{$_} ? "?$_" : $_ ]
23 } @{$self->args}
24 ] ];
25}
26
9d759b64 27sub resolve_for {
28 my ($self, $scope) = @_;
29 my $predicate = $scope->lookup_predicate($self->predicate);
30 my @args = map { ref($_) ? $_ : $scope->lookup($_) } @{$self->args};
efad53c4 31 #if (my $step = $scope->known_facts->resolution_step_for($predicate, @args)) {
32 # return $step;
33 #}
ccf0d4fe 34 return $predicate->resolution_step_for($self, @args);
9d759b64 35}
36
d6b0c811 37sub consider_step {
38 my ($self) = @_;
39 DX::Step::ConsiderProposition->new(proposition => $self);
40}
41
9d759b64 421;