Commit | Line | Data |
9d759b64 |
1 | package DX::Proposition; |
2 | |
3 | use DX::Class; |
4 | |
384a5e93 |
5 | has predicate => (is => 'ro', isa => Str, required => 1); |
9d759b64 |
6 | |
a97779a1 |
7 | has args => (is => 'ro', isa => ArrayRef[Str|Value], required => 1); |
9d759b64 |
8 | |
a97779a1 |
9 | has introduced_names => (is => 'ro', isa => HashRef[One], required => 1); |
d1b6cb33 |
10 | |
a97779a1 |
11 | has required_names => (is => 'ro', isa => HashRef[One], required => 1); |
d1b6cb33 |
12 | |
c25fbf05 |
13 | sub for_deparse { |
14 | my ($self) = @_; |
15 | [ statement => [ |
16 | [ symbol => $self->predicate ], |
17 | map { |
18 | ref($_) |
19 | ? $_ |
20 | : [ symbol => $self->introduced_names->{$_} ? "?$_" : $_ ] |
21 | } @{$self->args} |
22 | ] ]; |
23 | } |
24 | |
9d759b64 |
25 | sub resolve_for { |
26 | my ($self, $scope) = @_; |
27 | my $predicate = $scope->lookup_predicate($self->predicate); |
28 | my @args = map { ref($_) ? $_ : $scope->lookup($_) } @{$self->args}; |
efad53c4 |
29 | #if (my $step = $scope->known_facts->resolution_step_for($predicate, @args)) { |
30 | # return $step; |
31 | #} |
ccf0d4fe |
32 | return $predicate->resolution_step_for($self, @args); |
9d759b64 |
33 | } |
34 | |
35 | 1; |