Next: , Previous: , Up: Evaluation   [Contents][Index]


9.4 Backquote

バッククォート構成(backquote constructs)を使用することにより、リストをクォートして、そのリストのある要素を選択的に評価することができます。もっとも簡単な使い方では、スペシャルフォームquoteと同じです (前のセクションで説明しています。Quotingを参照してください)。 たとえば、以下の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))

スペシャルマーカー‘,@’を使用すれば、評価された値を結果リストに継ぎ足す(splice)こともできます。継ぎ足されたリストの要素は、結果リスト内の他の要素を同じレベルになります。‘`’を使用しない等価なコードは、しばしば読むのが困難です。以下にいくつかの例を示します:

(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)