(backquote arg)
  arg: any form


The backquote macro expands into code which constructs a copy of its argument. This usually means that it expands into a tree of nested calls to the arr function.

(backquote (a (b c) 10))

; ...expands to...

(arr 'a (arr 'b 'c) 10)

By default, evaluation is completely suppressed: backquote considers all of its input to be literal data instead. However, the unquote form can be used to copy part of the input into the output verbatim. This means that when the backquote form is evaluated (not when it's expanded!), the unquoted form will be evaluated, and its result will be interleaved into the output.

(backquote (w x (y z) 3.14))
(backquote (w ~x ~(y z) 3.14))

; ...expands to...

(arr 'w 'x (arr 'y 'z) 3.14)
(arr 'w x (y z) 3.14)

When backquote encounters symbols which end in #, such as example#, it will replace each distinct symbol with a fresh gensym, each time the backquote form is evaluated. (This does not recurse through unquote forms, or nested backquote forms.)

(backquote (a# b# (a# ~b#)))

; ...expands to...

  (let gs-a (gensym 'a))
  (let gs-b (gensym 'b))

  ; note that gs-a appears twice
  (arr gs-a gs-b (arr gs-a b#))) 

(backquote x) is usually abbreviated as `x.