- A new constraint is called and becomes active.
- An active constraint exits: it has either been inserted in the store after trying all rules or has been removed from the constraint store.
- An active constraint fails.
- An active constraint starts looking for an alternative solution.
In addition to the above ports, CHR constraints have five additional ports:
- A suspended constraint is woken and becomes active.
- An active constraint has tried all rules and is suspended in the constraint store.
- An active or passive constraint is removed from the constraint store.
- An active constraint tries a rule with possibly some passive constraints. The try port is entered just before committing to the rule.
- An active constraint commits to a rule with possibly some passive constraints. The apply port is entered just after committing to the rule.
chr_trace/0 predicate and disabled with the chr_notrace/0 predicate.
When enabled the tracer will step through the
ports, accepting debug commands, and simply write out the other ports.
The following debug commands are currently supported:
CHR debug options: <cr> creep c creep s skip g ancestors n nodebug b break a abort f fail ? help h help
Their meaning is:
- Step to the next port.
- Skip to exit port of this call or wake port.
- Print list of ancestor call and wake ports.
- Disable the tracer.
- Enter a recursive Prolog top level. See break/0.
- Exit to the top level. See abort/0.
- Insert failure in execution.
- Print the above available debug options.
library(chr)module contains several predicates that allow inspecting and printing the content of the constraint store.
- Activate the CHR tracer. By default the CHR tracer is activated and deactivated automatically by the Prolog predicates trace/0 and notrace/0.
- Deactivate the CHR tracer. By default the CHR tracer is activated and deactivated automatically by the Prolog predicates trace/0 and notrace/0.
- Define the set of CHR ports on which the CHR tracer asks for user
intervention (i.e. stops). Spec is either a list of ports as
defined in section 8.4.1
or a predefined `alias'. Defined aliases are:
fullto stop at all ports,
offto never stop, and
defaultto stop at the
applyports. See also leash/1.
- Prints all suspended constraints of module Mod to the
standard output. This predicate is automatically called by the
SWI-Prolog top level at the end of each query for every CHR module
currently loaded. The Prolog flag
chr_toplevel_show_storecontrols whether the top level shows the constraint stores. The value
trueenables it. Any other value disables it.
- Returns a constraint in the constraint store. Via backtracking, all constraints in the store can be enumerated.