(define (include-loop? x)
(define first-point x)
(define (iter x)
(if (null? x)
#f
(or (eq? first-point x) (iter (cdr x)))))
(iter (cdr x)))
(define a '(1 2 3))
(set-cdr! (cddr a) (cdr a))
(include-loop? a)
(define (include-loop? x)
(define checked '())
(define (add-checked! a)
(set! checked (cons a checked)))
(define (already-checked? a)
(not (not (memq a checked))))
(define (iter x)
(if (null? x)
#f
(begin
(add-checked! x)
(or (already-checked? x) (iter (cdr x))))))
(iter (cdr x)))
(include-loop? a)