next up previous
Next: 13.3 マクロの展開 Up: 13 マクロ Previous: 13.1 マクロの定義

13.2 バッククオート

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日