Next: , Previous: , Up: Defining Primitive Constraints   [Contents][Index]


10.10.10.4 Range Expressions

A range expression has one of the following forms, where Ri denote range expressions, Ti denote integer valued term expressions, S(Ti) denotes the integer value of Ti in S, X denotes a variable, I denotes an integer, and S denotes the current store.

dom(X)

evaluates to D(X,S)

{T1,…,Tn}

evaluates to {S(T1),…,S(Tn)}. Any Ti containing a variable that is not “quantified” by unionof/3 will cause the indexical to suspend until this variable has been assigned.

T1..T2

evaluates to the interval between S(T1) and S(T2).

R1/\R2

evaluates to the intersection of S(R1) and S(R2)

R1\/R2

evaluates to the union of S(R1) and S(R2)

\R2

evaluates to the complement of S(R2)

R1+R2
R1+T2

evaluates to S(R2) or S(T2) added pointwise to S(R1)

-R2

evaluates to S(R2) negated pointwise

R1-R2
R1-T2
T1-R2

evaluates to S(R2) or S(T2) subtracted pointwise from S(R1) or S(T1)

R1 mod R2
R1 mod T2

evaluates to the pointwise floored modulo of S(R1) and S(R2) or S(T2)

R1 rem R2
R1 rem T2

evaluates to the pointwise truncated remainder of S(R1) and S(R2) or S(T2)

R1 ? R2

evaluates to S(R2) if S(R1) is a non-empty set; otherwise, evaluates to the empty set. This expression is commonly used in the context (R1 ? (inf..sup) \/ R3), which evaluates to S(R3) if S(R1) is an empty set; otherwise, evaluates to inf..sup. As an optimization, R3 is not evaluated while the value of R1 is a non-empty set.

unionof(X,R1,R2)

evaluates to the union of S(E1),…,S(EN), where each EI has been formed by substituting K for X in R2, where K is the I:th element of S(R1). See N Queens for an example of usage.

Please note: if S(R1) is infinite, then the evaluation of the indexical will be abandoned, and the indexical will simply suspend.

switch(T,MapList)

evaluates to S(E) if S(T1) equals K and MapList contains a pair K-E. Otherwise, evaluates to the empty set. If T contains a variable that is not “quantified” by unionof/3, then the indexical will suspend until this variable has been assigned.



Send feedback on this subject.