Default CC can be thought of as a nondeterministic
constraint programming language, in much the same
way as Prolog. A problem P should be modeled as an
agent A in such a way that a solution for P is exactly a
resting point of A.
The usefulness of such a programming language is
directly dependent on how much propagation it can do
so as to avoid search as much as possible. A principle
found useful in Prolog is the "Andorra principle":
postpone speculative (nondeterministic) work as long
as there is deterministic work.
The current implementatation (v0.2) of jcc supports
Andorra incompletely. During execution, choice points
(i.e. Else agents) are collected, not executed rightaway.
When there is nothing else left to do as far as
propagation of unification or scheduling of Ask-
suspended computations is concerned, the next
available choice point is scheduled.
To fully implement Andorra, the list of available Else
Agents should be examined. If any of these agents
have been rendered determinate (e.g. because the Else
condition is now entailed or disentailed) then these
agents should be executed rightaway. This is not being
done.