login

6.1.3 Operations on terms with attributed variables

copy_term(+Term, -Copy, -Gs)
Create a regular term Copy as a copy of Term (without any attributes), and a list Gs of goals that represents the attributes. The goal maplist(call,Gs) recreates the attributes for Copy. The nonterminal attribute_goals/3, as defined in the modules the attributes stem from, is used to convert attributes to lists of goals.

This building block is used by the top level to report pending attributes in a portable and understandable fashion. This predicate is the preferred way to reason about and communicate terms with constraints.

copy_term_nat(+Term, -Copy)
As copy_term/2. Attributes, however, are not copied but replaced by fresh variables.
term_attvars(+Term, -AttVars)
AttVars is a list of all attributed variables in Term and its attributes. That is, term_attvars/2 works recursively through attributes. This predicate is cycle-safe. The goal term_attvars(Term,[]) in an efficient test that Term has no attributes; scanning the term is aborted after the first attributed variable is found.