- Title
- macroexpand-1
- Type
- Function
- Arguments
- macroexpand-1 FORM &optional ENV
- Package
- lisp
- Section
- マクロ
- File
- builtin.l
macroexpandに似ていますが、展開されるレベルが1レベルで終わるところが違います。
自作のマクロなどがどう展開されるのか調べるときに便利です。
使用例:
(defmacro my-macro ()
`(dotimes (x 10)))
というマクロがあるとき
(macroexpand '(my-macro))
=> (block nil (let* ((x 0) (#1=#:count 10)) (lisp::*loop (if (>= x #1#) (return (progn 'nil))) (tagbody) (setq x (+ x 1)))))
とmy-macro展開後のdotimesまで(実際はdotimesを展開後さらにdo*を展開)が
再帰的に展開されますが、
(macroexpand-1 '(my-macro))
=> (dotimes (x 10))
と、my-macroだけが展開されます。
- Seealso
- macroexpand