【问题标题】:elisp mapcar + lambda + defmacro helpelisp mapcar + lambda + defmacro 帮助
【发布时间】:2011-02-13 05:11:05
【问题描述】:

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

(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 的值?

【问题讨论】:

    标签: emacs macros lisp elisp


    【解决方案1】:

    lisp 宏的一个主要特点是评估参数。阅读macro pages in the manual,特别是expansion of macrosmacroexpand 函数可用于调试问题。此外,backquote 可能会帮助您更简洁地编写宏的主体。

    【讨论】:

      【解决方案2】:

      我的 elisp 有点生疏,但在有人提出实际解释之前:我可以让您的示例按预期工作得更多,我将 cmd 替换为 (eval cmd)(可能与 name 相同)宏定义体。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多