我的代码是这样的:
(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/