Common LispのマクロとCのマクロの違い


実現方法の違い

C

基本的に文字列(トークン)の置換

Common Lisp

構文操作(リスト操作) 。
構文の文脈(レキシカル変数等)も操作可能(&environment等を利用する)。
なお、構文操作の枠組みで文字列置換でマクロ展開することも可能(マクロ展開の仕組みの中で文字列操作すれば良い)

処理フェイズの違い

C

プリプロセッサによる置換処理

Common Lisp

基本的にコンパイル前のマクロ展開が利用されるが、eval実行時に展開することも可能

参考文献