In this subsection we cover several guidelines on how to use CHR to write
constraint solvers and how to do so efficiently.
- Check guard bindings yourself.
- It is considered bad practice to write guards that bind variables of
the head and to rely on the system to detect this at runtime. It is
inefficient and obscures the working of the program.
- Set semantics.
- The CHR system allows the presence of identical constraints, i.e.
multiple constraints with the same functor, arity and arguments. For
most constraint solvers, this is not desirable: it affects efficiency
and possibly termination. Hence appropriate simpagation rules should be
added of the form:
constraint \ constraint <=> true.
- Multi-headed rules.
- Multi-headed rules are executed more efficiently when the constraints
share one or more variables.
- Mode and type declarations.
- Provide mode and type declarations to get more efficient program execution.
- Compile once, run many times.
- Does consulting your CHR program take a long time? Probably
it takes the CHR compiler a long time to compile the CHR rules into Prolog
code. When you disable optimizations the CHR compiler will be a lot quicker,
but you may lose performance.
Send feedback on this subject.