+ (setf (cdar ,name) ,x)
+ (setf (car ,name) nil)))
+
+(defmacro collect-append (list &optional (name *collecting-anon-list-name*))
+ "Append LIST to the tail of `collecting' list NAME. This obviously
+ involves copying LIST."
+ (with-gensyms item
+ `(dolist (,item ,list)
+ (collect ,item ,name))))
+
+(defmacro collect-nconc (list &optional (name *collecting-anon-list-name*))
+ "Attach LIST to the tail of `collecting' list NAME. This will involve
+ destroying LIST if anything else gets collected afterwards."
+ (let*/gensyms list
+ `(when ,list
+ (setf (cdar ,name) ,list)
+ (setf (car ,name) (last ,list)))))