macro 展開式を見易くする
pprint という関数があるようだ。pretty-print の略だと思うが、これを使用すると整形して式を出力してくれる。
(defun macro-check (&rest body) (pprint (macroexpand-1 body)))
が、試してみたがうまくいかない。
? (defun macro-check (&rest body) (pprint (macroexpand-1 body))) MACRO-CHECK ? (macro-check '(dolist (x '(0 1 2)) (princ (* x x)))) ((DOLIST (X '(0 1 2)) (PRINC (* X X)))) ?
なんか二重括弧で渡されているようだ。どうやら、&rest が悪さをしている様子。これを無くすとうまくいく。
? (defun macro-check (body) (pprint (macroexpand-1 body))) MACRO-CHECK ? (macro-check '(dolist (n '(1 2 3)) (princ (* x x)))) (DO* ((#:G7674 '(1 2 3) (CDR (THE LIST #:G7674)))) ((NULL #:G7674)) (LET* ((N (CAR #:G7674))) (TAGBODY (PRINC (* X X))))) ?
&rest で渡された場合は、どうやら括弧を一つ余計につけるようだ。