Now the modified recursive descent processor takes over. I stress the
word ``modified'' because its operation is greatly enhanced by the
continued use of the soundness (need-based) and island-processing
behavior described above. At each node in the recursive descent
, one of the
remaining rules is chosen, and the others failed. This, in effect, makes
an artificial island out of the node, and its island constraints can be
implemented. Every time a rule is failed, the soundness of other rules that
depend on it is checked, and the effected node's island status determined and
acted upon.
It should also be noted that, if at any point, the above processes cause a node
to have no valid rules remaining, that situation is immediately detected and
backtracking is instigated
. This
occurs at the node where the failures are propagated. In a ``normal'' planner
(i.e. one without the dependency information available here), such a failure
would not even be noticed until the failed node is reached in the recursive descent
processing. This is because the effects of instantiating a rule on other rules
is not known until the other nodes are reached and their preconditions analyzed.
In practice, this might not happen until much wasted processing has occurred
in between.
RELATION_19: no decision necessary
CLAUSE_28:
eliminating rule 0 in CLAUSE_28
rule 0 in CLAUSE_28 already failed
eliminating rule 2 in CLAUSE_28
making island in CLAUSE_28 rule 1
APPLYING ISLAND CONSTRAINTS
eliminating rule 0 in CLAUSE_28
rule 0 in CLAUSE_28 already failed
%RECONCILE_1: no decision necessary
%JESUS_20: no decision necessary
%CREATURE-SET_6: no decision necessary
%GOD_15: no decision necessary
CLAUSE_31: no decision necessary
%DEATH_1:
eliminating rule 1 in %DEATH_1
making island in %DEATH_1 rule 0
APPLYING ISLAND CONSTRAINTS
no island constraints
%JESUS_21: no decision necessary
%CROSS:
eliminating rule 1 in %CROSS_1
making island in %CROSS_1 rule 0
APPLYING ISLAND CONSTRAINTS
no island constraints