Next: 13.3 マクロの展開
Up: 13 マクロ
Previous: 13.1 マクロの定義
whenのマクロ定義では,
(list 'if condition (cons 'progn body)))
という式がでてきていましたが,
これは,
(if condition (progn . body))
というような形に近い形で記述できれば分かり易い.
そのために用意されているのがバッククオート(`)というマクロ文字
です.
マクロ文字とは,入力上の省略形を与える文字で,
クオートもマクロ文字でした.
つまり,(quote (a b c)) と書かずに,'(a b c)と書けばよかった
わけです.
バッククオートを用いると,whenのマクロ定義本体である,
(list 'if condition (cons 'progn body)))
は,
`(if ,condition (progn . ,body))
と書くことができます.ここで,カンマ(,)は,カンマの次にくる式を
評価してリストに埋め込むということを行ないます.
<cl> (setq x '(1 2))
(1 2)
<cl> `(a b x c d)
(A B X C D)
<cl> `(a b ,x c d)
(A B (1 2) C D)
<cl> `(a b ,@x c d)
(A B 1 2 C D)
<cl> x
(1 2)
<cl> `(a b ,.x c d)
(A B 1 2 C D)
<cl> x
(1 2 C D)
というように,カンマのすぐ後に @ をつけると 評価した値をappendした結果を返
します.また,カンマのすぐ後に . をつけると 評価した値をnconcします.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日