我正在做,但我不确定我的答案。
练习3.13:考虑以下制造循环程序,它使用
练习3.12中定义的最后一对程序:
(定义(使循环X)(设置CDR!(最后一对x)x)x)
绘制一个方框和指针图,显示由
(定义z(制造周期(列表‘a’b’c)))
如果我们试图计算(最后一对z),会发生什么?
我想知道为什么
(last-pair z)
变成一个无限循环忽略方框和指针关系图,下面是我对它的理解:
(set-cdr! (last-pair x) x)
(last-pair x)
将是一对,然后当我们这样做时,这对将变成:(cons 'c (cons 'a (cons 'b (cons 'c (cons 'a (cons 'b (cons 'c (cons 'a (cons 'b (cons 'c ...))))))))))
我的理解正确吗?
最佳答案
不。
您的回答似乎表明(last-pair x)
是无限多次调用cons
的结果。
不是这样。x
仍然只有3个cons细胞,但最后一个细胞指向第一个细胞,形成一个循环(蛇咬自己的尾巴)。
关于linked-list - SICP练习3.13-制造周期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43188415/