copy_term/2 — make copy of a term
copy_term/2 will copy the term
TermIn and unify this copy with
TermOut. Unbound variables in
TermOut will not be shared between the two terms; i.e., uninstantiated variables occurring in
TermIn will be replaced in
TermOut by new uninstantiated variables not occurring in
?- copy_term(f(X,g(Y,X)),Z). X=X Y=Y Z=f(_A,g(_B,_A)) yes. ?- Y=f(9,rr), copy_term(Y, X), X==Y. Y=f(9,rr) X=f(9,rr) yes. ?- Y=f(9,r, H), copy_term(Y, X), write(x=X),nl, X==Y. x = f(9,r,_6203) no.
copy_term/2 is useful in situations involving destructive assignment. It is useful not only for the obvious situation of making a copy which is then destructively modified, but also for avoiding certain problems regarding structures becoming uninstantiated upon backtracking, as in
bagof, etc. It is also useful when using access predicates created with either
make_gv/1 for further discussion.