Emacs elisp mapcar+;λ+;解除宏帮助

Emacs elisp mapcar+;λ+;解除宏帮助,emacs,macros,lisp,elisp,Emacs,Macros,Lisp,Elisp,我正在尝试使用宏生成函数: (defmacro make-my-emacs-command-region (cmd name) (list 'defun (intern (format "my-emacs-command-%s-%s" cmd name)) '(&optional arg) (list 'interactive "p") (list (intern (format "mark-%s" name)) 'arg)

我正在尝试使用宏生成函数:

(defmacro make-my-emacs-command-region (cmd name)
  (list 'defun (intern (format "my-emacs-command-%s-%s" cmd name))
        '(&optional arg)
        (list 'interactive "p")
        (list (intern (format "mark-%s" name)) 'arg)
        (list (intern (format "my-emacs-command-%s-region" cmd))
              '(region-beginning) '(region-end))))
发电机:

(mapcar (lambda (a) (make-my-emacs-command-region a buffer))
        '(foo bar))
但我得到:

my-emacs-command-a-buffer

我做错了什么?我怎样才能强制传递
a
的值呢?

我的elisp有点生疏,但除非有人给出实际的解释:我可以让您的示例比预期的更有效,我在宏定义体中将
cmd
替换为
(eval cmd)
(可能与
名称
相同)


希望这能有所帮助。

lisp宏的一个要点是参数是未计算的。请仔细阅读,特别是。
macroexpand
函数可用于调试问题。此外,这可能会帮助您更简洁地编写宏的主体