gpt4 book ai didi

emacs - Elisp 在 progn 上使用 apply 函数列表

转载 作者:行者123 更新时间:2023-12-05 02:10:11 27 4
gpt4 key购买 nike

我是一个新的 emacs 用户。并尝试编写一些 Elisp 来更好地学习这个软件。虽然我遇到了一些问题。

我想在 progn 上使用 apply 来按顺序运行函数列表。但我得到如下错误。我只是很困惑,需要一些帮助来告诉我如何在 Elisp 中实现这一点,谢谢。

(progn
(+ 1 1)
(+ 2 2)
)
;; => 4

(apply #'progn ((+ 1 1) (+ 2 2)))
;; => Invalid function: (+ 1 1)

(apply #'progn ('(+ 1 1) '(+ 2 2)))
;; => Invalid function: '(+ 1 1)

(apply #'progn '((+ 1 1) (+ 2 2)))
;; => Invalid function: #<subr progn>

我玩上面的玩具因为我从 vim 来到 emacs。所以我安装了evil和evil number。并想要取回 vim 编号 inc 和 dec 绑定(bind) C-a,C-x。所以我写了一个宏来避免样板。

(defmacro set-evil-number-keymap (key-set func &rest modes)
`(apply 'progn
,(-map
(lambda (mode)
`(define-key ,(intern (concat "evil-" mode "-state-map")) (kbd ,key-set)
',(intern
(concat "evil-numbers/" func))))
,modes)))

(set-evil-number-keymap "C-a" "inc-at-pt" "normal" "insert")
(set-evil-number-keymap "C-x" "dec-at-pt" "normal" "insert")

我的期望如下。虽然它只是不运行。


(progn
(define-key evil-normal-state-map (kbd "C-a") ’evil-numbers/inc-at-pt) (define-key evil-visual-state-map (kbd "C-a") ’evil-numbers/inc-at-pt))

(progn
(define-key evil-normal-state-map (kbd "C-x") ’evil-numbers/dec-at-pt) (define-key evil-visual-state-map (kbd "C-x") ’evil-numbers/dec-at-pt))


最佳答案

您不能对像 progn 这样的“特殊形式”调用 apply(请参阅 info (elisp)Special Forms),它们具有独特的评估规则。

progn 本身已经提供了一种顺序计算机制,因此您的初始尝试确实可以达到您想要的效果。然而,在顶层,表单将按顺序执行,因此那里不需要 progn

关于emacs - Elisp 在 progn 上使用 apply 函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115293/

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