(define survives? (lambda (position n) (or (< n 3) (and (not (= position 3)) (survives? (renumber position n) (- n 1)))))) (define renumber (lambda (position n) (- (if (< position 3) (+ position n) position) 3))) (define first-survivor-after (lambda (position n) (let ((next (if (or (< position 0) (>= position n)) 1 (+ position 1)))) (if (survives? next n) next (first-survivor-after next n)))))