fork(1) download
  1. ; second largest item
  2.  
  3. (define (second-max lt? xs)
  4. (if (or (null? xs) (null? (cdr xs)))
  5. (error 'second-max "not enough data")
  6. (begin
  7. (when (lt? (car xs) (cadr xs))
  8. (set! xs (cons (cadr xs) (cons (car xs) (cddr xs)))))
  9. (let loop ((first (car xs)) (second (cadr xs)) (xs (cddr xs)))
  10. (cond ((null? xs) second)
  11. ((lt? second (car xs))
  12. (if (lt? first (car xs))
  13. (loop (car xs) first (cdr xs))
  14. (loop first (car xs) (cdr xs))))
  15. (else (loop first second (cdr xs))))))))
  16.  
  17. (display (second-max < '(4 1 9 2 3 8 5 7 6))) (newline)
Success #stdin #stdout 0.02s 42832KB
stdin
Standard input is empty
stdout
8