追記

上のcycle?だとcarの所でできた循環を見つけることができない。

(define no-ret2 ;;carのところで循環するループ
  (let ((lst (list 1 2 3)))
    (set-car! (cdr lst) lst)
    lst))


(define rets (list ret3 ret4 ret7 no-ret no-ret2))

;;m3.18
(define (cycle? seq)
    (define (loop seq state)
      (let ((memory state))
      (define (sub-loop x)
        (cond ((not (pair? x)) #f)
              ((memq x memory) #t)
              (else
               (set! memory (cons x memory))
               (or (loop (car x) memory)
                   (sub-loop (cdr x))))))
      (sub-loop seq)))
  (loop seq '()))
  
(map cycle? rets)	;;31:user> => (#f #f #f #t #t)