| p | predicate |
|---|---|
| a | list |
(qsort < '(5 3 7 9 1)) => (1 3 5 7 9)
(load "partition.scm")
(define (qsort p a)
(letrec
((sort
(lambda (a)
(if (null? a)
a
(let ((p* (partition (lambda (x) (p (car a) x))
(cdr a))))
(append (sort (cadr p*))
(list (car a))
(sort (car p*))))))))
(sort a)))