Lisp みたいに,最初から高級な言語を使うと,むしろマクロの位置付けがわかりにくいのではないかと思った.もっと原始的な言語を使った方が,その恩恵はわかりやすいと思う. マクロというのは,略記法のことであり,それ以上でもそれ以下でもない. コードのまとまりに名前を付けておいて,ひとつメタな立ち位置からコードを生成する. 計算能力自体は増えない.ただ,人間が書きやすく,読みやすくなる,それだけ. 例えばラムダ計算の世界には,数という概念は存在しない. 「3」 という記述によって表現される概念は,λf . λx . f (f (f x)). のようにラムダ項にエンコードされて表現される. ソースコード上に 3 という記述を見かけたら,λf . λx . f (f (f x)). に置き換えますよ,という約束事を,マクロによって定めておけば,人間にとってわかりやすい.もちろん対応させるだけだから