バッククォート構文を使うと、リストを引用しつつ、そのリストの要素を選択的に評価することができます。最も単純なケースでは、特殊形式
quote(前節で説明。引用を参照)と同じになります。例えば、次の2つの形式は同一の結果をもたらします:
`(a list of (+ 2 3) elements)
⇒ (a list of (+ 2 3) elements)
'(a list of (+ 2 3) elements)
⇒ (a list of (+ 2 3) elements)
バッククォートの引数内にある特殊マーカー ‘,’ は、定数ではない値であることを示します。Emacs Lisp 評価器は ‘,’ の引数を評価し、その値をリスト構造に格納します:
`(a list of ,(+ 2 3) elements)
⇒ (a list of 5 elements)
リスト構造のより深い階層においても、‘,’による置換が可能です。例えば:
`(1 2 (3 ,(+ 4 5)))
⇒ (1 2 (3 9))
また、特殊なマーカー ‘,@’ を使用して、評価済みの値を結果のリストに挿入することもできます。挿入されたリストの要素は、結果のリストの他の要素と同じ階層の要素となります。‘`’ を使用しない同等のコードは、しばしば可読性に欠けます。以下にいくつかの例を示します。
(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)
バッククォート構文は、共有される可能性があり、変更すべきではないコンス、ベクトル、文字列を返すという点で quote と同様に動作します。自己評価形式を参照してください。