SICP 练习 3.13 - make-cycle

SICP exercise 3.13 - make-cycle

我正在做 exercise 3.13 from SICP 但我不确定我的答案。

Exercise 3.13: Consider the following make-cycle procedure, which uses the last-pair procedure defined in Exercise 3.12:

(define (make-cycle x) (set-cdr! (last-pair x) x) x)

Draw a box-and-pointer diagram that shows the structure z created by

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

What happens if we try to compute (last-pair 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 ...))))))))))

我的理解正确吗?

没有

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

不是这样。

x 仍然 只有 3 个缺点单元格,但最后一个指向第一个,创建一个 循环 (一条蛇咬自己的尾巴)