variables - 理解 Lisp 中变量重新分配的困难

标签 variables lisp

我在理解 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/

相关文章:

Java - 如何制作一个可以在任何地方使用的变量?

data-structures - 你能在 lisp 中使用哈希表吗?

xml - LISP 下载和解析 XML

lisp - setf 似乎在 aref 给出时改变了它的两个参数

c++ - 有没有办法在 .cpp 中初始化/调用 CTOR?

reactjs - 带有React和Firebase登录的Electron弹出问题

c++ - 变量损坏 C++ 字符串 Visual Studio 2005

java - 将方法参数声明为 final 的目的是什么?

emacs - 杀死 paredit 中的下一个表达式

仿函数位置的 Lisp 非法参数