2.3.1 Bits of a Constraint Solver

Let's now illustrate how to solve this problem in Oz. We define the following constraint which can be added directely to the constraint store:

[X Y Z] ::: 1#7

Here we make use of Oz-variables whose syntax is given by words with leading capital letters. The line above states that X, Y, Z are so called finite domain variables, i.e. variables taking values in a finite set of integers (here, between 1 and 7). We define the following set of propagators involving these variables:

+ Y =: 3*Z
- Y =: Z

Note the trailing colon in =:. The trailing colon is characteristic of operators denoting finite domain constraints.

Next, we invoke a predefined distribution strategy to enumerate the assignments to X, Y, Z consistent with our constraints.

{FD.distribute naive [X Y Z]}

We represent a solution as a record (called feature tree in computational linguistics):

solution(x:X y:Y z:Z)

This record has label solution and three features x, y, z (Oz atoms, i.e. words starting with a lowercase letter). x:X indicates that the value of feature x is given by variable X.


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)