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 modulo of
`S(R1)`and`S(R2)`or`S(T2)` `R1``rem`

`R2``R1``rem`

`T2`- evaluates to the pointwise 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, 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`

, the indexical will suspend until this variable has been assigned.

Send feedback on this subject.