Commit | Line | Data |
9d759b64 |
1 | package DX::Proposition; |
2 | |
d6b0c811 |
3 | use DX::Step::ConsiderProposition; |
4 | |
9d759b64 |
5 | use DX::Class; |
6 | |
384a5e93 |
7 | has predicate => (is => 'ro', isa => Str, required => 1); |
9d759b64 |
8 | |
a97779a1 |
9 | has args => (is => 'ro', isa => ArrayRef[Str|Value], required => 1); |
9d759b64 |
10 | |
a97779a1 |
11 | has introduced_names => (is => 'ro', isa => HashRef[One], required => 1); |
d1b6cb33 |
12 | |
a97779a1 |
13 | has required_names => (is => 'ro', isa => HashRef[One], required => 1); |
d1b6cb33 |
14 | |
c25fbf05 |
15 | sub 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 |
27 | sub 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 |
37 | sub consider_step { |
38 | my ($self) = @_; |
39 | DX::Step::ConsiderProposition->new(proposition => $self); |
40 | } |
41 | |
9d759b64 |
42 | 1; |