sub with_one_step {
my ($self) = @_;
- my $hyp = $self->current_hypothesis;
return undef unless my $step = $self->next_step;
- my ($new_ss) = $step->apply_to($self);
- return $new_ss if $new_ss;
- my ($first_alt, @rest_alt) = @{$self->alternatives};
- return undef unless $first_alt;
- trace 'search.backtrack.rewind_to' => $first_alt->[1];
- return $self->but(
- next_step => DX::Step::Backtrack->new,
- );
+ return $step->apply_to($self);
}
sub force_backtrack {
if (my $step = $self->proposition->resolve_for($hyp->scope)) {
return $ss->but(next_step => $step);
}
- return undef;
+ return $ss->but(next_step => DX::Step::Backtrack->new);
}
1;
trace 'step.apply.old_hyp '.$self => $old_hyp;
trace 'step.apply.actions '.$self => $self->actions;
my $new_hyp = $self->_apply_to_hyp($old_hyp);
- return (undef, $self->alternative_step) unless $new_hyp;
+ return $ss->but(next_step => DX::Step::Backtrack->new) unless $new_hyp;
trace 'step.apply.new_hyp '.$self => $new_hyp;
my $ns = DX::Step::InvokeNextPredicate->new(
proposition => $ss->next_proposition($new_hyp)