Next: FDBG Writing Visualizers, Up: FDBG Advanced Usage [Contents][Index]
The printing of variable names is customized by defining the following hook predicate.
fdbg:fdvar_portray(Name, Var, FDSet) hook
This hook predicate is called whenever an annotated constraint
variable (see FDBG Annotation) is printed. Name is the
assigned name of the variable Var, whose domain will
be FDSet as soon as the narrowings of the current constraint take
effect. The current domain is not passed to the hook, but it
can be easily determined with a call to fd_set/2
. (Although
these two sets may be the same if the constraint did not narrow it.)
If fdbg:fdvar_portray/3
is undefined or fails, then the default
representation is printed, which is Name between angle brackets.
The printing of legend lines is customized by defining the following hook predicate.
fdbg:legend_portray(Name, Var, FDSet) hook
This hook is called for each line of the legend by the built-in
legend printer. The arguments are the same as in the case of
fdbg:fdvar_portray/3
. Note that a prefix of four spaces and a
closing newline character is always printed by FDBG.
If fdbg:fdvar_portray/3
is undefined or fails, then the default
representation is printed, which is
Name = RangeNow [ -> RangeAfter ]
The arrow and RangeAfter are only printed if the constraint narrowed the domain of Var.
The following example will print a list of all possible values instead of the range for each variable in the legend:
:- multifile fdbg:legend_portray/3. fdbg:legend_portray(Name, Var, Set) :- fd_set(Var, Set0), fdset_to_list(Set0, L0), fdset_to_list(Set, L), ( L0 == L -> format('~p = ~p', [Name, L]) ; format('~p = ~p -> ~p', [Name, L0, L]) ).