[ library(ic) | Reference Manual | Alphabetic Index ]
# ?Vars :: ++Domain

Constrain Vars to have the domain Domain.
*Vars*
- Variable or collection (a la collection_to_list/2) of variables
*Domain*
- Domain specification

## Description

Constrains Vars to take only integer or real values from the domain
specified by Domain. Vars may be a variable or a collection of variables
(as accepted by collection_to_list/2). Domain can be specified as a
simple range Lo .. Hi, or as a list of subranges and/or individual
elements. Multiple subranges and/or individual elements are allowed in
integer domains only. If all subrange bounds and individual elements are
integers the domain is considered an integer domain and the variables
Vars are constrained to be integral; otherwise it is considered a real
domain and the type of the variables is not constrained. Note that
infinities are considered to be untyped for this purpose.

For instance:

X :: 0..1 % boolean
X :: -1..5 % integer between -1 and 5
X :: 1..inf % strictly positive integer
X :: 0.0..10.0 % real between 0.0 and 10.0
X :: 1.5..3.7 % real between 1.5 and 3.7
X :: 0.0..5 % real between 0.0 and 5.0
X :: 1.4__1.6..3.6__3.8 % real where the bounds aren't known exactly
X :: breal(0)..inf % nonnegative real
X :: [0..3, 5, 8..10] % any integer from 0 to 10 except 4 and 6
[X, Y, Z] :: 1..8 % apply domain to X, Y and Z
M[2..4, 5] :: 1..8 % apply to rows 2..4, column 5 of matrix M
X :: [0.0..5.0, 7.0..9.0] % Type error
X :: [a, b, c] % Type error

## Examples

[eclipse 2]: X :: 0..1.
X = X{[0, 1]}
Yes (0.00s cpu)
[eclipse 3]: X :: -1..5.
X = X{-1 .. 5}
Yes (0.00s cpu)
[eclipse 4]: X :: 1..inf.
X = X{1 .. 1.0Inf}
Yes (0.00s cpu)
[eclipse 5]: X :: 0.0..10.0.
X = X{0.0 .. 10.0}
Yes (0.00s cpu)
[eclipse 6]: X :: 1.5..3.7.
X = X{1.5 .. 3.7}
Yes (0.00s cpu)
[eclipse 7]: X :: 1.4__1.6..3.6__3.8.
X = X{1.4 .. 3.8}
Delayed goals:
ic : (-(X{1.4 .. 3.8}) =< -1.6__-1.4)
ic : (X{1.4 .. 3.8} =< 3.6__3.8)
Yes (0.00s cpu)
[eclipse 8]: X :: [0..3, 5, 8..10].
X = X{[0 .. 3, 5, 8 .. 10]}
Yes (0.00s cpu)

## See Also

integers / 1, reals / 1, fd_sets : :: / 2, suspend : :: / 2, ic_sets : :: / 2, gfd : :: / 2, ic_hybrid_sets : :: / 2, fd : :: / 2, :: / 3, #:: / 2, $:: / 2