Copying and Substitution Functions [These are system functions in Common Lisp. The system functions subst and sublis copy only as much structure as necessary.]
(defun copy-tree (z)
(if (consp z)
(cons (copy-tree (first z))
(copy-tree (rest z)))
z) )
; substitute x for y in z
(defun subst (x y z)
(if (consp z)
(cons (subst x y (first z))
(subst x y (rest z)))
(if (eql z y) x z)) )
; substitute in z with bindings in alist
(defun sublis (alist z)
(let (pair)
(if (consp z)
(cons (sublis alist (first z))
(sublis alist (rest z)))
(if (setq pair (assoc z alist))
(cdr pair)
z)) ))