fork(1) download
  1. ; last man standind
  2.  
  3. (define (f xs k)
  4. (define (last-pair xs) (if (null? (cdr xs)) xs (last-pair (cdr xs))))
  5. (define (cycle xs) (set-cdr! (last-pair xs) xs) xs)
  6. (let loop ((k (- k 1)) (xs (cycle xs)))
  7. (cond ((= (car xs) (cadr xs))
  8. (car xs))
  9. ((zero? k)
  10. (let ((k (cadr xs)))
  11. (set-cdr! xs (cddr xs))
  12. (loop k xs)))
  13. (else (loop (- k 1) (cdr xs))))))
  14.  
  15. (display (f '(6 2 3 1 4 7 5) 3)) (newline)
Success #stdin #stdout 0.01s 7924KB
stdin
Standard input is empty
stdout
3