11.3.43 copy_term/[2,3] [ISO]

Synopsis

copy_term(+Term, -Copy)

Unifies Copy with a copy of Term in which all variables have been replaced by brand new variables, and all mutables by brand new mutables.

copy_term(+Term, -Copy, -Body)

Furthermore, if Term contains variables with goals blocked on them, or variables with attributes that can be interpreted as a goal (see lib-atts), then Body is unified with the conjunction of such goals. If no such goals are present, Body is unified with the atom true. The idea is that executing Body will reinstate blocked goals and attributes on the variables in Copy equivalent to those on the variables in Term.

Arguments

Term
term
Copy
term
Body
callable

Description

Independent copies are substituted for any mutable terms in term. It behaves as if defined by:

     copy_term(X, Y) :-
             assert('copy of'(X)),
             retract('copy of'(Y)).

The implementation of copy_term/2 endeavors to conserve space by not copying ground subterms.

When you call clause/[2,3] or instance/2, you get a new copy of the term stored in the database, in precisely the same sense that copy_term/2 gives you a new copy.

Examples

Comments

copy_term/2 is part of the ISO Prolog standard; copy_term/3 is not.

See Also

ref-lte-cpt.


Send feedback on this subject.