Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 关于原始树和it中常见引用的混淆';复制树返回的副本_Tree_Lisp_Common Lisp_Copytree - Fatal编程技术网

Tree 关于原始树和it中常见引用的混淆';复制树返回的副本

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中

实用公共Lisp的一章指出,由
复制树返回的树副本
((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。它只是引用,即使它只是一个缺点