5.2 Constraint Extensions and Combinators

Operators

<statement> ::=

E1 :: E2

==>

{`FD.int` E2 E1}

<statement> ::=

E1 ::: E2

==>

{`FD.dom` E2 E1}

<expression> ::=

E1 :: E2

==>

{`FD.reified.int` E2 E1}

<expression> ::=

E1 ::: E2

==>

{`FD.reified.dom` E2 E1}

Failure

<statement>, <expression> ::=

fail

==>

raise failure(...end

where the omitted parts of the exception are implementation-dependent.

Negation

<statement>, <expression> ::=

not S end

==>

thread 
   cond 
S then fail 
   else skip 
   end 
end

Combinators

<statement>, <expression> ::=

cond L1 [] ... [] Ln 
end

==>

cond L1 [] ... [] Ln 
else 
   raise error(kernel(noElse 
......end 
end

where the omitted parts of the exception are implementation-dependent.

<dis statement clause> ::=

[ D in  ] S

==>

[ D in  ] S then skip

<choice statement clause>, <choice expression clause> ::=

SE

==>

skip then SE

<cond statement clause>, <dis statement clause>, <choice statement clause> ::=

D in S1 [ then S2 ]

==>

x1 ... xn in D' S1 [ then S2 ]

if D is not a sequence of distinct variables and where {x1, ..., xn} = PV(D) and D' is D with singleton variables and escapes removed.

<cond expression clause>, <choice expression clause> ::=

D in S then E

==>

x1 ... xn in D' S then E

if D is not a sequence of distinct variables and where {x1, ..., xn} = PV(D) and D' is D with singleton variables and escapes removed.

Constructive Disjunction

Constructive disjunction is currently not specified. See Section 5.2 of ``System Modules'' for some information about constructive disjunction.


Martin Henz and Leif Kornstaedt
Version 1.0.1 (19990218)