Attribute names are linked to modules. This means that certain operations on attributed variables cause hooks to be called in the module whose name matches the attribute name.
[X,Y]=[0,1]
should be processed
sequentially by the Prolog engine, or a more general hook should be
provided in the future. See Triska,
2016 for more information.//
The latter property ensures that users can reason about residual goals, and see for themselves whether a constraint library behaves correctly. It is this property that makes it possible to thoroughly test constraint solvers by contrasting obtained residual goals with expected answers.
This nonterminal is used by copy_term/3, on which the Prolog top level relies to ensure the basic invariant of pure Prolog programs: The answer is declaratively equivalent to the query.
Note that instead of defaulty representations, a Prolog list is used to represent residual goals. This simplifies processing and reasoning about residual goals throughout all programs that need this functionality.
attributes(portray)
is in effect. If the hook succeeds the
attribute is considered printed. Otherwise Module = ...
is
printed to indicate the existence of a variable. This predicate is
deprecated because it cannot work with pure interface predicates like
copy_term/3.
Use attribute_goals//1 instead to map attributes to residual goals.