**''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.