The CHR constraints defined in a particulary .chr
file
are associated with a module. The default module is user
.
One should never load different .chr
files with the same
CHR module name.
The SWI-Prolog CHR compiler exploits term_expansion/2
rules to translate the constraint handling rules to plain Prolog. These
rules are loaded from the library library(chr)
. They are
activated if the compiled file has the .chr
extension or
after finding a declaration of the format below.
:- constraints ... |
It is adviced to define CHR rules in a module file, where the module
declaration is immediately followed by including the library(chr)
library as examplified below:
:- module(zebra, [ zebra/0 ]). :- use_module(library(chr)). :- constraints ... |
Using this style CHR rules can be defined in ordinary Prolog
.pl
files and the operator definitions required by CHR do
not leak into modules where they might cause conflicts.