; Determines whether a list has a cycle (define (has-cycle? x) (define (has-visited? n visited) (cond ((null? visited) #f) ((eq? n (car visited)) #t) (else (has-visited? n (cdr visited))))) (define (iter x visited) (cond ((null? x) #f) ((has-visited? x visited) #t) (else (iter (cdr x) (cons x visited))))) (iter x '())) ; 1 ]=> (has-cycle? '()) ; ; ;Value: #f ; ; 1 ]=> (has-cycle? (list 1 2 3)) ; ; ;Value: #f ; ; 1 ]=> (has-cycle? (make-cycle (list 1 2 3))) ; ; ;Value: #t ; ; 1 ]=> (has-cycle? (cons 1 (cons 2 (make-cycle (list 3 4))))) ; ; ;Value: #t