クォートとバッククォートの違い

GNU Emacs Lispリファレンスマニュアル: Quoting
http://www.geocities.co.jp/SiliconValley-Bay/9285/ELISP-JA/elisp_119.html#SEC120
GNU Emacs Lispリファレンスマニュアル: Backquote
http://www.geocities.co.jp/SiliconValley-Bay/9285/ELISP-JA/elisp_175.html

■まず入力の仕方のメモ

  • クォート:S-7*1
'
  • バッククォート:S-@*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)

バッククォートは引数の中に","を入れるとそこだけ評価するらしい。

(list 'a 'list 'of (+ 2 3) 'elements)
     => (a list of 5 elements)
`(a list of ,(+ 2 3) elements)
     => (a list of 5 elements)

"`"の中は深い所でも","が使えるらしい。

(defmacro t-becomes-nil (variable)
  `(if (eq ,variable t)
       (setq ,variable nil)))

(t-becomes-nil foo)
     == (if (eq foo t) (setq foo nil))

バッククォート構文と言うらしい。

■リストな感じな使い方
バッククォートは中で、",@"を使うとリストを合体できるらしい。

(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 some-list '(2 3))
`(1 ,some-list 4)
=>(1 (2 3) 4)

本来なら、こういう風になってしまうのでコレをとは違う感じにシンプルにやりたい時に便利なのかもしれない。あとは、",@"の後ろに式をおいた場合にどういう風になるかとか。

(setq some-list '(2 3))
`(1 ,@(cdr some-list) 4)
=>(1 3 4)

*1:テンキーじゃない方の数字の"7"のキーをShiftと同時押しで

*2:Shiftと@のキーを同時押し