我在理解 nconc 的一些实验结果时遇到了一些问题。
(setf x '(a b c))
(setf y '(1 2 3))
(nconc x y) ; => x = (A B C 1 2 3), y = (1 2 3)
根据我的阅读,nconc 将 x 的其余字段更改为指向 y。
(setf (nth 1 y) 10) ; => x = (A B C 1 10 3), y = (1 10 3)
到目前为止,还不错。
(setf y '(4 5 6)) ; => x = (A B C 1 10 3) y = (4 5 6)
为什么 x 仍然引用旧的 cons 单元格,或者换句话说,重新分配 y 不只是更改 y 地址处的数据?
提前致谢 迈克尔
最佳答案
Lisp 变量不指向固定内存。它们指向 Lisp 数据对象。设置变量不会改变任何对象内存。该变量只是指向一些其他数据。
关于variables - 理解 Lisp 中变量重新分配的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676047/