乐正

Actions speak louder than words.

Sicp-ex3-13

问题

请考虑下面的make-circle过程,其中使用了练习3.12定义的last-pair过程:

1
2
3
(define (make-circle x)
  (set-cdr! (last-pair x) x)
  x)

画出盒子指针图形,说明下面表达式创建起的z的结构:

1
(define z (make-cycle (list 'a 'b 'c)))

如果我们试着去计算(last-pair z)那会出现什么情况?

解答

make-circle过程将一个链表的最后一个序对的cdr部分指向了自身,形成一个回环链表。当我们试着去调用(last-pair z)的时候,会因为程序永远无法停止从而产生错误。z的盒子指针图形如下:

练习3.13

draft

« sicp-ex3-12 sicp-ex3-14 »

Comments