fork(1) download
  1. ; finding the median
  2.  
  3. (define (median xs)
  4. (let* ((counts (make-vector 256 0))
  5. (len (do ((xs xs (cdr xs)) (len 0 (+ len 1))) ((null? xs) len)
  6. (vector-set! counts (car xs) (+ (vector-ref counts (car xs)) 1)))))
  7. (let loop ((lo 0) (lo-count 0) (hi 255) (hi-count 0))
  8. (cond ((< lo-count (/ len 2)) (loop (+ lo 1) (+ lo-count (vector-ref counts lo)) hi hi-count))
  9. ((< hi-count (/ len 2)) (loop lo lo-count (- hi 1) (+ hi-count (vector-ref counts hi))))
  10. (else (/ (+ lo hi) 2))))))
  11.  
  12. (display (median '(2 4 5 7 3 6 1))) (newline)
  13. (display (median '(5 2 1 6 3 4))) (newline)
Success #stdin #stdout 0s 7276KB
stdin
Standard input is empty
stdout
4
3.5