ここでいう「マクロ」は一言で言うと「プログラムを生成する機能」ですね。 例えばCのマクロを例に上げますと、 #define MAX(a, b) (a) > (b) ? (a) : (b) というようなマクロを定義すると、後に MAX(10, x) と書いた際に (10) > (x) ? (10) : (x) というプログラムがコンパイル時に生成されます。 Cなどのマクロは、マクロ専用の文法があり、 マクロで書けるものにはある程度の制限が付きます。例えば、 「マクロの引数が定数の際に奇数か偶数かで『生成するプログラム』を変える」 などといった複雑なことはできません。 一方、Lispのマクロは、Lispそのもので書くことが可能で、 任意のプログラムをマクロとして書くことができます。 マクロの中で条件分岐やループなど、なんでも出来てしまいます。 これにより、コンパイル時にマクロの引数の型や値に応