;;;;; ;;;;; ;;;;; Order Library ;;;;; ;;;;; (define $ordering (algebraic-data-matcher { })) (define $split-by-ordering (lambda [$compare] (lambda [$xs $p] (match xs (list something) {[ [{} {} {}]] [ (let {[[$ys1 $ys2 $ys3] ((split-by-ordering compare) rs p)]} (match (compare x p) ordering {[ [{x @ys1} ys2 ys3]] [ [ys1 {x @ys2} ys3]] [ [ys1 ys2 {x @ys3}]]}))]})))) (define $qsort (lambda [$compare] (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) xs p)]} {@((qsort compare) ys1) @ys2 @((qsort compare) ys3)})))]})))