我在使用访问器函数nth 时遇到了一些问题。我将一个列表传递给某个函数,并使用nth对函数中的列表元素进行新的绑定,然后当我从函数中调用列表时,它被修改了,这不是我想要的!发生什么了?
一些例子
(defun test (x) (incf x)) => TEST
(setq a 1) => 1
(test a) => 2
a => 1
我明白上面发生了什么,但是如果我们将所有内容都更改为列表,就会发生一些我无法理解的事情
(defun test (x) (incf (nth 0 x))) => TEST
(setq a '(1)) => (1)
(test a) => 2
a => (2)
我预计 a 是 (1),为什么它被修改了?我还尝试了其他功能,例如car和first,结果是一样的。
PS,我在 Lispworks 和 SBCL 中试过,结果一样。