簡體   English   中英

Elisp 在 progn 上使用 apply 以獲取函數列表

[英]Elisp use apply on progn for list of functions

我是一個新的 emacs 用戶。 並嘗試編寫一些 Elisp 來更好地學習這個軟件。 雖然我遇到了一些問題。

我想在progn上使用applyprogn運行函數列表。 但我得到如下錯誤。 我很困惑,需要一些幫助來告訴我如何在 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。 所以我安裝了邪惡和邪惡的號碼。 並想要返回 vim 編號 inc 和 dec 綁定 Ca、Cx。 所以我寫了一個宏來避免樣板。

(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))


我是emacs的新用戶。 並嘗試編寫一些Elisp以便更好地學習該軟件。 雖然我遇到一些問題。

我想使用對progn applyprogn運行功能列表。 但是我得到如下錯誤。 我只是感到困惑,需要一些幫助來告訴我如何在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。 於是我安裝了邪惡號和邪惡號。 並想要返回vim編號inc和dec綁定Ca,Cx。 所以我寫了一個宏作為打擊以避免樣板。

(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))


我是emacs的新用戶。 並嘗試編寫一些Elisp以便更好地學習該軟件。 雖然我遇到一些問題。

我想使用對progn applyprogn運行功能列表。 但是我得到如下錯誤。 我只是感到困惑,需要一些幫助來告訴我如何在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。 於是我安裝了邪惡號和邪惡號。 並想要返回vim編號inc和dec綁定Ca,Cx。 所以我寫了一個宏作為打擊以避免樣板。

(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))


我是emacs的新用戶。 並嘗試編寫一些Elisp以便更好地學習該軟件。 雖然我遇到一些問題。

我想使用對progn applyprogn運行功能列表。 但是我得到如下錯誤。 我只是感到困惑,需要一些幫助來告訴我如何在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。 於是我安裝了邪惡號和邪惡號。 並想要返回vim編號inc和dec綁定Ca,Cx。 所以我寫了一個宏作為打擊以避免樣板。

(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))


您遇到了一些 XY 問題,但對您的名義問題有效的是

(eval (cons 'progn
            '((print (+ 1 1))
              (print (+ 2 2)))))

eval通常被認為是初學者程序員的誤解,但在這種情況下,由於 Rorschach 解釋的原因,您不能使用apply Elisp 實際上在這里遵循 Common Lisp 規范,它apply

符號作為宏或特殊形式的名稱是非法的

因此,在一般情況下,你必須使用eval直接在你的組裝程序cons -ing一個progn給你“指令列表”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM