(define join
(lambda (l1 l2)
(cond
((null? l1) l2)
(else (cons (car l1) (join (cdr l1) l2))))))
;Value: join
(define qsort
(lambda (x)
(cond
((null? x) '())
(else (join (qsort (smaller x))
(cons (car x) (qsort (bigger x))))))))
;Value: qsort
(define smaller
(lambda (x)
(filter (car x) (cdr x) <)))
;Value: smaller
(define bigger
(lambda (x)
(filter (car x) (cdr x) >=)))
;Value: bigger
(define filter
(lambda (x l f)
(cond
((null? l) '())
((f (car l) x) (cons (car l) (filter x (cdr l) f)))
(else (filter x (cdr l) f)))))
;Value: filter
(qsort '(9 2 4 3 95 84 3 6 8 4 2))
;Value 19: (2 2 3 3 4 4 6 8 9 84 95)