lisp - Emacs Lisp 映射函数名称列表并使用相同的 arg 调用它们

标签 lisp elisp

我无法理解折叠函数列表并使用特定参数调用它们时需要采用的方法。

这是我假设会起作用的。我尝试了各种变体,使用 eval 等。有任何指示吗?

(mapcar (lambda (fn) (fn 'utf-8))
        (list #'set-terminal-coding-system
              #'set-keyboard-coding-system
              #'prefer-coding-system))

当我运行它时,我只得到“Symbol 的函数定义是无效的:fn”。

编辑 |好的,这样可行,但是当上面的示例使用 #'function-name synax 传递函数时,需要使用 apply 似乎很奇怪。

(mapcar (lambda (fn) (apply fn '(utf-8)))
        '(set-terminal-coding-system
          set-keyboard-coding-system
          prefer-coding-system))

最佳答案

在 Emacs lisp 中,符号具有单独的值槽和函数槽1

函数参数作为参数符号的 传入,但是当您评估 (fn 'utf-8) 时,您使用的是 fn 符号的 function 插槽,它将不包含您想要的内容(或者在本例中,根本不包含任何内容;因此出现错误“Symbol 的函数定义是无效的:fn”)。

要调用保存在变量中的函数,您必须因此funcallapply(或类似的)。

另见:

1 即它是所谓的“lisp-2”,而不是“lisp-1”,两者都有一个 namespace 。

关于lisp - Emacs Lisp 映射函数名称列表并使用相同的 arg 调用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16633436/

相关文章:

lisp - 优秀的 Common Lisp 代码示例?

.net - 将 .NET 连接到 Common Lisp

excel - 当我以交互方式关闭 Excel 时,Lisp OLE Excel 进程不会被终止

emacs - Emacs 新手,Emacs 似乎无法正确解释我的按键?

emacs - 在 Emacs 中使用 texcount 来确定 Latex 或 tex 文件的字数(需要可选参数)

lisp - ( :before/:after) method invocation in CLOS? 的顺序

仿函数位置的 Lisp 非法参数

emacs - 禁止 emacs 自动填充选定区域

elisp - 为什么下面的 elisp 代码不起作用?

ruby-on-rails - 在 emacs : utf-8 problem 中使用 url elisp 包创建 POST