我正在做exercise 3.13 from SICP但我不确定我的答案。
练习3.13:考虑以下使用的制作循环程序 练习3.12中定义的最后一对程序:
(define(make-cycle x)(set-cdr!(last-pair x)x)x)
绘制一个框和指针图,显示由
创建的结构z(定义z(make-cycle(列表'a'b'c)))
如果我们尝试计算(最后一对z)会发生什么?
我想了解原因
(last-pair z)
变成无限循环。忽略盒子和指针图,这是我理解它:
(set-cdr! (last-pair x) x)
(last-pair x)
将是(cons 'c '())
对,然后当我们set-cdr!
时,该对将成为:
(cons 'c (cons 'a (cons 'b (cons 'c (cons 'a (cons 'b (cons 'c (cons 'a (cons 'b (cons 'c ...))))))))))
我的理解是否正确?
答案 0 :(得分:2)
没有
您的回答似乎表明(last-pair x)
是无限次多次调用cons
的结果。
不是这样。
x
仍只有3个cons单元格,但最后一个指向第一个,创建一个循环(一条蛇咬在尾巴上)。