The procedures for copying lists (see Lists) only produce a flat
copy of the input list, and currently Guile does not even contain
procedures for copying vectors. The (ice-9 copy-tree)
module
contains a copy-tree
function that can be used for this purpose,
as it does not only copy the spine of a list, but also copies any pairs
in the cars of the input lists.
(use-modules (ice-9 copy-tree))
Recursively copy the data tree that is bound to obj, and return
the new data structure. copy-tree
recurses down the
contents of both pairs and vectors (since both cons cells and vector
cells may point to arbitrary objects), and stops recursing when it hits
any other object.