(gensym (? tag))
  tag: any type (optional)
  returns a sym

Constructs a unique symbol.

The symbol returned from this function is guaranteed to compare unequal to all other symbols. This can be useful for maintaining macro hygiene.

Gensyms cannot be printed or parsed.

backquote has an "auto-gensym" feature which may be more convenient than calling the gensym function directly.

When tag is present, it's converted into a string which is incorporated into the gensym's printed representation. This can be helpful for debugging.

(prn (gensym)) ; prints #<gs:0>
(prn '#<gs:0>) ; error: #<gs:0> is invalid syntax

(prn (gensym 'tagged)) ; prints #<gs:tagged:1>