GENSYM is similar to MAKE-SYMBOL . The difference is that GENSYM supports fancy naming by counting →, so the characters have unique names, which makes debugging easier with gensyms, for example, in macro decompositions.
#:foo is a designation for the reader.
So, you have a function that creates these and literary notations. Note that when *print-circle* true, some type of identity can be stored in s-expressions: #(#1=#:FOO #1#) .
Typically, this is similar to (a . b) and (cons 'a 'b) , #(ab) and (vector 'a 'b) ... One is literal data, and the other is the form that will create ("cons") fresh objects.
If you look at your macro, the main problem is that its nested use can cause problems. Both lexically and dynamically.
Lexically, it can be the same variable that is being restored.
dynamically, if it is a special variable, it can also be a rebound
Using the generated character while increasing the macro time will ensure that different and extended code will not transmit bindings.
source share