关于原始树中常见引用的混淆以及COPY-TREE返回的副本

时间:2014-02-28 20:29:39

标签: tree lisp common-lisp copytree

Practical Common Lisp 的第13. Beyond Lists: Other Uses for Cons Cells章指出,由((1 2) (3 4) (5 6))返回的树COPY-TREE的副本和原始树本身共同引用的对象是数字5,6和符号NIL

我发现它令人困惑,因为我认为数字1,2,3和4也经常被引用。因为数字是不可变的。

我的假设错了吗?

如果是这样,那么为什么通常不引用数字1,2,3和4?

1 个答案:

答案 0 :(得分:1)

这意味着源中的每个cons单元都没有被引用,而是在结果中变得新鲜。所有缺点都只是被引用。

是数字是不可变的,但是由于数据在地址中编码,因此适合指针的低数字实际上不是对象。在任何情况下,carcdr中的“指针地址”只会被复制到cons中的新copy-tree,只要它本身不是一个利弊单元。

copy-list是相同的,除了它只对cdr有新的缺点而不是car中的其他结构。它只是被引用,即使它只是缺点。