declare fun {MakeSort Less} class $ meth init skip end meth qsort(Xs Ys) case Xs of nil then Ys = nil [] P|Xr then S L in {self partition(Xr P S L)} {Append {self qsort(S $)} P|{self qsort(L $)} Ys} end end meth partition(Xs P Ss Ls) case Xs of nil then Ss=nil Ls=nil [] X|Xr then Sr Lr in if {Less X P} then Ss=X|Sr Ls=Lr else Ss=Sr Ls=X|Lr end {self partition(Xr P Sr Lr)} end end end end