Emacs lisp : create list using quote in local scope(e. g 函数范围)

标签 emacs elisp

我的代码是这样的:

(defun test () "Test."
  (setq lista '(A))
  (push 'B lista)
  (nreverse lista))

(message "%s" (test))  ; Output is (A B)
(message "%s" (test))  ; Output is (B A B)

这看起来很奇怪,因为我期望结果是

(A B)
(A B)

如果我替换(setq lista '(A))(setq lista (list 'A)) ,我得到了预期的结果。我认为列表创建方法导致了差异,但我不知道细节。

我的 emacs 版本是 GNU Emacs 24.5.1

最佳答案

你正在这样做:

(defvar t1 '(A))
(defun test ()
  "Test."
  (setq lista t1)
  (push 'B lista)
  (nreverse lista))

您修改了代码中的 cons 单元:第一次调用后,t1 变为 '(A B)

通过使用(list)而不是(quote)来避免它:

(defun test ()
  "Test."
  (setq lista (list 'A))
  (push 'B lista)
  (nreverse lista))

关于Emacs lisp : create list using quote in local scope(e. g 函数范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45435467/

相关文章:

emacs - (重新)编号 emacs 中的编号列表(缪斯)

emacs - 如果名为 "xyz"的帧存在,则切换到该帧

windows - 如何让 emacs 正确打印 pdf?

r - Emacs + R : too long buffer name */usr/local/bin/R* for R buffers

loops - Emacs : cl-loop and repeatedly calculated values

lisp - flet 相当于 let*?

regex - emacs 贪婪搜索向后正则表达式

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

emacs - 如何找到在 emacs 中定义键绑定(bind)的位置?

emacs - Emacs ansi-term 的配置文件名是什么?