This constraint suspends until its first two arguments are ground. It then unifies Bool according to the truth value of the corresponding ::/2 constraint.
Note: as opposed to ::/2, the first argument cannot be a list.
?- ::(X, 1 .. 5, B), X = 3. B = 1 X = 3 Yes (0.00s cpu) ?- ::(X, 1.0 .. 5.0, B), X = 3.0. B = 1 X = 3.0 Yes (0.00s cpu) % range violated ?- ::(X, 1 .. 5, B), X = 6. B = 0 X = 6 Yes (0.00s cpu) % integrality violated ?- ::(X, 1 .. 5, B), X = 3.0. B = 0 X = 3.0 Yes (0.00s cpu)