您可以使用诸如macroexpand-1函数之类的东西,我将解释为什么它比正常的宏扩展更好:
CL-USER> (defmacro our-when(test &body body) `(if ,test (progn ,@body))) OUR-WHEN CL-USER> (macroexpand-1 '(our-when(> 2 1)(format t "Hello World"))) (IF (> 2 1) (PROGN ((FORMAT T "Hello World")))) T CL-USER>
在这里我们创建一个宏,我们实际上可以看到宏如何扩展其中的表达式。有时候调试使用macroexpand-1与使用macroexpand时,因为macroexpand也会破坏你宏中的任何宏(比如内置的Common Lisp宏)。 Macroexpand-1会将细分限制为您创建的宏。
使用 MACROEXPAND 用于查看您的宏调用正在扩展的内容。
MACROEXPAND
(pprint (macroexpand '(my-defun ...)))