Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

LISP part V

Name: Anonymous 2008-03-08 8:38

LISP

Name: Anonymous 2008-04-04 11:06

(define (radix-sort list radix)
  (define (vector-mutate! v i f) (vector-set! v i (f (vector-ref v i))))
  (let loop ((list (map cons list list)))
    (if (zero? (apply + (map cdr list)))
        (map car list)
        (do ((list list (cdr list)) (buckets (make-vector radix '())))
          ((null? list) (loop (apply append (map reverse (vector->list buckets)))))
          (vector-mutate!
           buckets (remainder (cdar list) radix)
           (lambda (x) (cons (cons (caar list) (quotient (cdar list) radix)) x)))))))

Now supporting all nonnegative integer lists and all integer radices > 1.

Newer Posts