Common Lisp的副本树:原始对象和副本将共同引用哪些对象?

Cha*_*ers 3 common-lisp practical-common-lisp

我正在阅读《实践通用Lisp》,对Lisp的COPY-TREE功能有疑问。

这本书给出了调用的例子

(copy-tree '( '(1 2) '(3 4) '(5 6)))
Run Code Online (Sandbox Code Playgroud)

在解释了它之后,本书做出了如下声明:

如果原始文件中的cons单元引用了原子值,则副本中相应的cons单元将引用相同的值。因此,原始树和COPY-TREE生成的副本共同引用的唯一对象是数字5、6和符号NIL。

但这对我来说没有意义。我认为所有原子都将在原始和新原子之间共享。因此,我希望在原始副本和副本之间共享1、2、3、4、5、6和NIL,并且唯一的“新对象”将是所有CONS单元。

哪一个是正确的,为什么?

谢谢。

小智 5

我检查了网络版本,pdf版本和精装本。如前所述,前两个是错误的。精装本说明(粗体是我的):

如果原始文件中的cons单元引用了原子值,则副本中相应的cons单元将引用相同的值。因此,原始树和COPY-TREE生成的副本共同引用的唯一对象是数字1-6和符号NIL。

因此,精装书是正确的。