~rhcarvalho/+junk/racket

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#lang racket
;; Sleep sort implementation by Rodolfo Carvalho
;; 2011-10-15

(require rackunit)

(define (sleep-sort-simple lst)
  (define M (apply max lst)) ; take maximum value and...
  (for ([i (in-list lst)])
    (thread
     (λ ()
       (sleep (/ i M))       ; ...sleep for at most 1 second
       (displayln  i)))))

(define (sleep-sort lst)
  (define M (apply max lst)) ; take maximum value and...
  (define reverse-lst '())
  (map thread-wait
       (for/list ([i (in-list lst)])
         (thread
          (λ ()
            (sleep (/ i M))       ; ...sleep for at most 1 second
            (set! reverse-lst (cons i reverse-lst))))))
  (reverse reverse-lst))

(sleep-sort-simple '(7 3 1 4 2))

; a few tests
(check-equal? (sleep-sort '(7 3 1 4 2)) '(1 2 3 4 7))
(check-equal? (sleep-sort (shuffle (build-list 100 values))) (build-list 100 values))