UNQUOTE
Unquote form expect one argument. If unquote appears outside of backquoted list, it is ignored, and the argument is evaluated normally. But within a backquoted list, or any of its sub-lists, we can switch some symbols or sub-lists back to code mode with unquote character ,
(comma), which reader expands to unquote form.
>(setq b 3) ; set value of symbol B 3 >`(a ,b c) ; unquoted B in backquouted list (A 3 C) ; symbols A and C are not evaled, but B is
The last command is expanded to
>(backquote (a (unquote b) c))
Following example was shown for backquote:
>`(a ,(+ 1 2) c) ; backquoted list (A 3 C) ; form (+ 1 2) evaluated
If the evaluated element results in list, with unquoting it becomes sub-list of the backqouted list.
>`(a ,(list 1 2) c) ; function LIST produces list (A (1 2) C) ; list (1 2) as sublist
Important is that if we unqoute pre-existing list, this original list will become sublist, not a copy. SPLICE-UNQUOTE
is different in this.
See splice-unquote for further refinement. The forms BACKQUOTE
, UNQUOTE
and SPLICE-UNQUOTE
are useful for writing macros.