Next: Up: Previous:

マクロの定義

現在のマクロの使用は非常にad-hocかつ不完全なものであるが, それでも時に は有用なので情報を公開しておく.

たとえば, ある数に2を足した値を返す式をマクロとして実現するには, 以下 のように書く.

(def-fpp-macro 2+ args
  `(+ 2 ,@args))
これで, ABCL/fコンパイラがマクロの定義以降(2 x)+という式に 出会うと, それが, ( 2 x)+という形に展開されるようになる. つまりマクロの実行メカニズムは, ということである. つまりマクロの本体はマクロ呼び出しの引数をリストとし て受けとって, 展開された後の式を返すような関数である.

複雑な変換をする場合は, 展開された結果を書くために補助関数が必要になる 場合がある. そのために, def-fpp-expandを使う. これは Lispdefunと同じ働きをする. 例えば上の2+をあえて次のように 二つに分けて書いても良い.

(def-fpp-expand expand-2+ (args)
  `(+ 2 ,@args))

(def-fpp-macro 2+ args
  (expand-2+ args))
大きなマクロはこのように必要な変換関数を前持って書いて, マクロ本体を小 さくしておくのが良い.





Mitsubishi Research Institute,Inc.
Thu Feb 27 20:14:12 JST 1997