クラス名を指定すると、name
インスタンス変数とそのアクセサーをフォームに自動的に作成する次のコードを試していますclassname-name
。CLマクロ内で文字列からクラスアクセサー名を作成
(defmacro def-named-class (class-name)
`(defclass ,class-name()
((name :accessor ,(intern (format nil "~A-~A" class-name "name"))
:initarg :name
:initform ""))))
ここでの問題は、マクロの実行は、引数foo
と言うとき、アクセサ関数の名前が|FOO-name|
として来る、ということですが、私はそれだけでfoo-name
になりたいです。理由は、(intern "foo-name")
はシンボル|foo-name|
を返します。
(defmacro def-hyp (name1 name2 arg-list &body body)
`(defun ,(intern (format nil "~A-~A" name1 name2))
,arg-list
,@body))
そしてそれは正しく名前foo-name
と機能を生成(def-hyp foo name() 'foo-name)
のようにそれを呼び出します。しかし、私はこのように、正常な機能を同じことをしようとした場合。だから私は最初のマクロ内の文字列表現から正確に同じシンボルを取得する方法があるのだろうかと思います。私はClozure CLを使用しています。
[1関数名に2つの変数を組み合わせることに答えを行いますマクロで](http://stackoverflow.com/questions/24433035/combining-two-variables-into-one-function-name-in-macro)あなたのためにこれを解決する?受け入れられた回答の形式に関する部分に特に注意してください(免責事項:それは私のものです)。 –