マクロで作成された関数にシンボル名を代入するにはどうすればよいですか? ここで明らかな何かが欠けていると思います。たとえば、次のような変数と関数を定義するマクロを作成しようとしています。
(cl-defmacro mac (pkg)
(let (
;; Define some variables
(sym (intern (concat pkg "-file")))
(sym-def "default-file.el")
(sym-doc (concat "A custom var from `" pkg "'."))
;; Define some functions
(symfn (intern (concat pkg "-fn")))
(symfn-doc (concat "A function for `" pkg "'.")))
`(list
(defcustom ,sym ,sym-def ,sym-doc
:group (quote ,(make-symbol pkg))
:type '(choice (const :tag "None" nil)
file))
(defun ,symfn ()
,symfn-doc
(interactive)
(fn ,sym)))))
fn
返された関数は、次のようなシグネチャを持つ別の関数 ( ) を呼び出します。
(defun fn (var) (symbol-value var))
したがって、 のような呼び出しを期待しています(fn 'some-var)
。そして、次のようなマクロを使用できるようにしたい
(mac "pack")
そして、次の作業を行い、
pack-file ; works: "default-file.el"
(pack-fn) ; error: not a symbol
(quote ,sym)
、 、などを試しsymbol-name
ましたが、うまくいきません。