次のようなもの:
(defmacro def-wsdl-class (name (&rest supers)
(&rest slots)
&rest options)
`(progn
(eval-when (:compile-toplevel :execute)
(with-open-file (xml-file (make-pathname :name (string-capitalize name)
:type "wsdl"
:defaults (or *compile-pathname*
*load-pathname*))
:direction :output
:if-exists ,(getf options :if-wsdl-exists :error))
(when xml-file
(spit-xml xml-file ',name ',supers ',slots ,@options))))
`(defclass ,name (,@supers)
(,@slots)
,@(chew options)))))
編集:元の質問に答えるために、通常、リーダーマクロを(逆)引用することはできません。それらは構文が読み取られる場所で実行されます。これを読み取り時と呼びましょう。リーダー マクロは、通常のマクロ展開には関与せず、マクロ展開の前に動作します。
バッククォート リーダー マクロ内で呼び出されていることを認識して操作するリーダー マクロを作成することもできますが、バッククォート リーダー マクロの実装依存の動作を認識または変更する必要があります。
ただし、リーダー マクロからバッククォートされたフォームを返すことはできます。