;;;;; ;;;;; ;;;;; Order Library ;;;;; ;;;;; (define $ordering (algebraic-data-matcher { })) (define $compare (lambda [$m $n] (if (lt? m n) (if (eq? m n) )))) (define $split-by-ordering (lambda [$compare-fn] (lambda [$xs $p] (match xs (list something) {[ [{} {} {}]] [ (let {[[$ys1 $ys2 $ys3] ((split-by-ordering compare-fn) rs p)]} (match (compare-fn x p) ordering {[ [{x @ys1} ys2 ys3]] [ [ys1 {x @ys2} ys3]] [ [ys1 ys2 {x @ys3}]]}))]})))) (define $qsort (lambda [$compare-fn] (match-lambda (list something) {[ {}] [> {x}] [$xs (let {[$n (length xs)]} (let {[$p (nth (quotient n 2) xs)]} (let {[[$ys1 $ys2 $ys3] ((split-by-ordering compare-fn) xs p)]} {@((qsort compare-fn) ys1) @ys2 @((qsort compare-fn) ys3)})))]})))