追記
上の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)