macroexpandとかの話

 macroexpandというのをNANRIさんに教えてもらったので早速使いまくって、色々見てみたら、之は実に面白い。今までhelpをみても意味不明だなぁとか思っていたのがifや単純な形に直ぐに展開してくれるので、非常に便利。

一応

■macroexpand使い方
;ex:whenを展開
(macroexpand '(when t (t)))
=>(if t (progn (t)))

しかも、これの更に便利なのは、今まで知らないのとかはGrepして定義されている所とかを見ていたけど、創作したのとかもでも直ぐに展開してくれる感じ。
ヘルプに書いてあった使用例↓

使用例:
  ;;; マクロM2を定義してどのように展開
  (defmacro M2 (&rest args)
      `(progn
         (m-setup) ,@args (m-cleanup)))
  (macroexpand '(M2 (insert "Begin") (insert "End")))
  => (progn (m-setup) (insert "Begin") (insert "End") (m-cleanup))

というか、関数じゃなかったのね。マクロというものの存在を今頃知ったのは秘密。