gensym

added
1.0

ns
clojure.core

type
function

(gensym) (gensym prefix-string)

Returns a new symbol with a unique name. If a prefix string is
supplied, the name is prefix# where # is some unique number. If
prefix is not supplied, the prefix is 'G__'.

                user=> (gensym "foo")
foo2020

user=> (gensym "foo")
foo2027

user=> (gensym "foo")
;; ...

            
                user=> (gensym)
G__2034

user=> (let [my-unique-sym (gensym)]
         my-unique-sym)
G__2075

            
                ;; syntax-reader uses gensym for non-namespace-qualified symbols ending with '#'
;; http://clojure.org/reader

user=> `(name0#)       ; gensym, form is useful in defmacro
(name0__1206__auto__)

user=> `(user/name1#)  ; no gensym, namespace-qualified
(user/name1#)

user=> `(:key0#)       ; no gensym, keyword
(:key0#)

user=> `(::key1#)      ; no gensym, keyword
(:user/key1#)