~rhcarvalho/+junk/racket

« back to all changes in this revision

Viewing changes to demo/sleep-sort.rkt

  • Committer: Rodolfo Carvalho
  • Date: 2011-11-13 15:03:20 UTC
  • mfrom: (50.1.7 racket)
  • Revision ID: rhcarvalho@gmail.com-20111113150320-lo1yqejh3qhs5ow2
Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#lang racket
 
2
;; Sleep sort implementation by Rodolfo Carvalho
 
3
;; 2011-10-15
 
4
 
 
5
(require rackunit)
 
6
 
 
7
(define (sleep-sort-simple lst)
 
8
  (define M (apply max lst)) ; take maximum value and...
 
9
  (for ([i (in-list lst)])
 
10
    (thread
 
11
     (λ ()
 
12
       (sleep (/ i M))       ; ...sleep for at most 1 second
 
13
       (displayln  i)))))
 
14
 
 
15
(define (sleep-sort lst)
 
16
  (define M (apply max lst)) ; take maximum value and...
 
17
  (define reverse-lst '())
 
18
  (map thread-wait
 
19
       (for/list ([i (in-list lst)])
 
20
         (thread
 
21
          (λ ()
 
22
            (sleep (/ i M))       ; ...sleep for at most 1 second
 
23
            (set! reverse-lst (cons i reverse-lst))))))
 
24
  (reverse reverse-lst))
 
25
 
 
26
(sleep-sort-simple '(7 3 1 4 2))
 
27
 
 
28
; a few tests
 
29
(check-equal? (sleep-sort '(7 3 1 4 2)) '(1 2 3 4 7))
 
30
(check-equal? (sleep-sort (shuffle (build-list 100 values))) (build-list 100 values))
 
 
b'\\ No newline at end of file'