#lang R5RS
(define (last-pair x)
(if (null? (cdr x))
x
(last-pair (cdr x))))
(define (make-cycle x)
(set-cdr! (last-pair x) x)
x)
(define z (make-cycle (list 'a 'b 'c)))
(display z)
(last-pair z)
运行结果,之后会陷入死循环
#0=(a b c . #0#)
选入死循环的原因是因为上面的make-cycle创建了一个环形结构,调用last-pair由于没有最后一个元素,所以会死循环,下面是盒子指针图