相关疑难解决方法(0)

为什么elisp局部变量在这种情况下保持其值?

有人可以向我解释这个非常简单的代码片段中发生了什么吗?

(defun test-a ()
  (let ((x '(nil)))
    (setcar x (cons 1 (car x)))
    x))
Run Code Online (Sandbox Code Playgroud)

(test-a)第一次打电话时,我得到了预期的结果:((1)).但令我惊讶的是,再次召唤它,我得到了((1 1)),((1 1 1))等等.为什么会这样?期待(test-a)永远回归我错了((1))吗?另请注意,在重新评估定义后test-a,返回结果将重置.

还要考虑这个功能是否符合我的预期:

(defun test-b ()
  (let ((x '(nil)))
    (setq x (cons (cons 1 (car x)) 
                  (cdr x)))))
Run Code Online (Sandbox Code Playgroud)

(test-b)总是回来((1)).为什么不test-atest-b等同?

lisp emacs elisp literals

16
推荐指数
1
解决办法
520
查看次数

标签 统计

elisp ×1

emacs ×1

lisp ×1

literals ×1