The check_guard_bindings and already_in_store options from
the old chr library are supported. Note that the extended compiler can
actually detect some cases where guard bindings cannot constrain any global
variables (for example, var/1), and will in such cases no check
guard bindings.
New options, intended to control the way the compiler tries to optimise
code, are introduced. These are intended for the developers of the compiler,
and will not be discussed in detail here. The only currently supported
option in this category is single_symmetric_simpagation.
A new built-in predicate, in_chrstore/1, is used to inspect the
constraint store:
in_chrstore(+Constraint)
is used to test if Constraint is in the constraint store or not. It
can be used to prevent the addition of redundant constraints:
X leq Y, Y leq Z ==> \+in_chrstore(X leq Z)| X leq Z.
The above usage is only useful if the already_in_store option is
off. Note that as the state of a constraint that appears in the head is
not defined in the guard, it is strongly suggested that the user does not
perform this test in the guard for such constraints,