QuickSort in Scheme

I wrote this as fast as I could type and it had no bugs on the first try

;;; -------------------------------------------------------------------
;;; --- Return those numbers of list l that compare with p using op
;;;

   (define cmp-extract
      (lambda (p op l)
         (if (null? l)
             l
             (if (op (car l) p)
                 (cons (car l) (cmp-extract p op (cdr l)))
                 (cmp-extract p op (cdr l))))))

;;; -------------------------------------------------------------------
;;; --- The Quick Sort Program in Scheme
;;;

   (define quick
      (lambda (l)
         (if (null? l)
             l
             (let ((pivot (car l)))
                (let ((lower  (quick (cmp-extract pivot < l)))
                      (middle (cmp-extract pivot = l))
                      (upper  (quick (cmp-extract pivot > l))))
                   (append lower middle upper))))))