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?
答案 0 :(得分:1)
这意味着源中的每个cons单元都没有被引用,而是在结果中变得新鲜。所有缺点都只是被引用。
是数字是不可变的,但是由于数据在地址中编码,因此适合指针的低数字实际上不是对象。在任何情况下,car
和cdr
中的“指针地址”只会被复制到cons
中的新copy-tree
,只要它本身不是一个利弊单元。
copy-list
是相同的,除了它只对cdr
有新的缺点而不是car
中的其他结构。它只是被引用,即使它只是缺点。