"Nikodemus Siivola" nikodemus@random-state.net writes:
All copying functions except COPY-TREE and COPY-ALIST functions in CL are shallow, and neither :COPY-FN nor :KEY is very documentative as an argument name.
What's the use-case for this?
What's the use-case of COPY-HASH-TABLE itself?
I personally have needed it in two cases:
a) "the following code analyzes the hash-table in some possibly destructive way; I'm interested in the result of the analysis."
b) "the following codes frob the hash-table possibly destructively; I'm possibly interested in the difference between the original and the frobbed version."
In case a) the analysis is sometimes not about the aggregate data structure stored in the hash-table, but only about the content of a slot of that data structure. So, when copying the hash-table, we only KEY what's really needed (either by giving a pointer to the original thing, or by making a copy of it) --- rationale: The analysis sees only what it needs, so there's less opportunity for corruption.
In case b): If the code frobs destructively, the destructive operation is often not only restricted to the hash-table per se, but also to the data structures contained in the hash-table.
Notice that COPY-HASH-TABLE is still shallow by default. It's just that hash-tables are used in more complex situations, justifying a bit more flexibility.
-T.