Tree 关于原始树和it中常见引用的混淆';复制树返回的副本
实用公共Lisp的一章指出,由Tree 关于原始树和it中常见引用的混淆';复制树返回的副本,tree,lisp,common-lisp,copytree,Tree,Lisp,Common Lisp,Copytree,实用公共Lisp的一章指出,由复制树返回的树副本((1 2)(3 4)(5 6))和原始树本身共同引用的对象是数字5、6和符号NIL 我觉得它令人困惑,因为我认为数字1、2、3和4也经常被引用。因为数字是不可变的 我的假设错了吗 如果是这样的话,那么为什么数字1、2、3和4没有被普遍引用?这意味着源中的每个cons单元格都没有被引用,而是在结果中变为新的。所有不是缺点的东西都只是参考 是的数字是不可变的,但适合指针的低位数字实际上不是对象,因为数据是在地址中编码的。在任何情况下,car和cdr中
复制树返回的树副本((1 2)(3 4)(5 6))
和原始树本身共同引用的对象是数字5、6和符号NIL
我觉得它令人困惑,因为我认为数字1、2、3和4也经常被引用。因为数字是不可变的
我的假设错了吗
如果是这样的话,那么为什么数字1、2、3和4没有被普遍引用?这意味着源中的每个cons单元格都没有被引用,而是在结果中变为新的。所有不是缺点的东西都只是参考
是的数字是不可变的,但适合指针的低位数字实际上不是对象,因为数据是在地址中编码的。在任何情况下,car
和cdr
中的“指针地址”只需复制到copy tree
中的新cons
,只要它本身不是cons单元格即可
复制列表
是相同的,只是它只对cdr
执行新的cons,而对car
中的附加结构不执行新的cons。它只是引用,即使它只是一个缺点