macroexpandをもう少し
macroexpandを使用すれば、マクロを展開してその処理内容を確認できる、ということはわかったけれども、これをマクロじゃないものに使用した場合どうなるのか?エラーになるのか?それとも・・・
? (macroexpand '(incf x)) (SETQ X (+ X 1)) T ? (macroexpand '(setq x (+ x 1))) (SETQ X (+ X 1)) NIL ? (macroexpand '(+ 1 1)) (+ 1 1) NIL ?
どうやら、マクロじゃないものはそのまま表示されるようだ。式の後のNILとTはおそらくマクロであったか、そうでなかったかを示すものと思われる。仕様で定められた動作なのか?それともLispランタイムの実装依存なのか?
Common Lisp the Language, 2nd Edition
8.2. Macro Expansion
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node99.html
に存在するところを見ると仕様っぽいな。どうやら、macroexpand-1という方を使うのがメインのようだ。
? (macroexpand-1 '(incf x)) (SETQ X (+ X 1)) T ? (macroexpand-1 '(+ 1 1)) (+ 1 1) NIL ?
違いはよくわからないな。必要になったときにドキュメントを細かく読むことにしよう。