(use mailbox-threads) (define (make-result-collector count) (thread-start! (lambda () (let loop ((res '()) (remaining (- count 1))) (if (zero? remaining) '() (cons (thread-receive) (loop res (- remaining 1)))))))) (define (make-sleeper n rc) (lambda () (thread-sleep! n) (thread-send rc n))) (define (sleep-sort lst) (let ((rc (make-result-collector (length lst)))) (for-each (lambda (n) (thread-start! (make-sleeper n rc))) lst) (thread-join! rc))) (write (sleep-sort '(5 4 6 3 1 2))) (newline) (exit 0)