10.4 Backquote
Backquote constructs allow you to quote a list, but selectively evaluate elements of that list. In the simplest case, it is identical to the special form quote
(described in the previous section; see Quoting). For example, these two forms yield identical results:
`(a list of (+ 2 3) elements)
β (a list of (+ 2 3) elements)
'(a list of (+ 2 3) elements)
β (a list of (+ 2 3) elements)
The special marker β,
β inside of the argument to backquote indicates a value that isnβt constant. The Emacs Lisp evaluator evaluates the argument of β,
β, and puts the value in the list structure:
`(a list of ,(+ 2 3) elements)
β (a list of 5 elements)
Substitution with β,
β is allowed at deeper levels of the list structure also. For example:
`(1 2 (3 ,(+ 4 5)))
β (1 2 (3 9))
You can also splice an evaluated value into the resulting list, using the special marker β,@
β. The elements of the spliced list become elements at the same level as the other elements of the resulting list. The equivalent code without using β`
β is often unreadable. Here are some examples:
(setq some-list '(2 3))
β (2 3)
(cons 1 (append some-list '(4) some-list))
β (1 2 3 4 2 3)
`(1 ,@some-list 4 ,@some-list)
β (1 2 3 4 2 3)
(setq list '(hack foo bar))
β (hack foo bar)
(cons 'use
(cons 'the
(cons 'words (append (cdr list) '(as elements)))))
β (use the words foo bar as elements)
`(use the words ,@(cdr list) as elements)
β (use the words foo bar as elements)
If a subexpression of a backquote construct has no substitutions or splices, it acts like quote
in that it yields conses, vectors and strings that might be shared and should not be modified. See Self-Evaluating Forms.