SICP练习3.13 - 制作周期

时间:2017-04-03 15:19:01

标签: linked-list scheme lisp sicp recursive-datastructures

我正在做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 ...))))))))))

我的理解是否正确?

1 个答案:

答案 0 :(得分:2)

没有

您的回答似乎表明(last-pair x)是无限次多次调用cons的结果。

不是这样。

x 只有3个cons单元格,但最后一个指向第一个,创建一个循环(一条蛇咬在尾巴上)。