<< Prev | - Up - | Next >> |
In this section, we present the Oz functor Dominance
(see Section A.6) implementing a solver as described in the preceding section. It exports solutionPredicate
which can be used as follows:
{ExploreAll {Dominance.solutionPredicate Desc}}
where Desc
is a tree description in the form of a list where each element is of one of the forms described below:
dom(X R Y)
where X
and Y
are both atoms naming variables, and R
is an atom or list of atoms from the set eq
, above
, below
, side
.
lab(X f(X1 ... Xn))
where X
and Xi
are atoms naming variables.
labeled(X)
where X
is an atom naming a variable. This is a new constraint not mentioned in our abstract syntax but very convenient in practice: it simply states that X
must be identified with some variable that is explicitly labeled in the input description.
Dominance.oz
>=functor
import FD FS
export SolutionPredicate
define
<Dominance: SolutionPredicate>
<Dominance: MakeNode>
<Dominance: characteristic constraints>
<Dominance: well-formedness clauses>
<Dominance: Solver class>
<Dominance: utilities>
end
SolutionPredicate
takes a tree description as argument and returns a procedure appropriate for encapsulated search. This procedure creates a solver object. This object is only needed for converting the description into constraints and starting the search.
fun {SolutionPredicate Desc}
proc {$ Info}
{New Solver init(Desc Info) _}
end
end
<< Prev | - Up - | Next >> |