私は Common Lisp で作業していて、次の形式のスロット定義を非常に多く入力していることに気付きました。
(name :initarg :name :accessor name)
そこで、これを高速化するためにマクロを作成することを考えました。私は次のことを思いつきました:
(defmacro quickslot (name)
`(,name :initarg ,(intern (string-upcase name) "KEYWORD") :accessor ,name))
間違いなく汚いハックですが、機能的です。とか、そう思いました。コードを実行しようとしたとき、問題が発生しました。defclass はマクロであるため、引数は評価されずに渡されます。つまり、見るのではなく
(x :initarg :x :accessor x)
見える
(quickslot x)
もちろん、これはエラーを示します。
答えは、defclass の前にクイックスロットが確実に展開されるように、マクロ展開の順序を何らかの方法で制御することです。これが私の質問につながります: どうすればこれを達成できますか? または、私の最初の難問に対する別の解決策がある場合、それも評価されないわけではありません.