gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:42 25 4
gpt4 key购买 nike

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

这是我假设会起作用的。我尝试了各种变体,使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com