OptionalSort := proc(input, { ordering :: Or(procedures,identical("lexicographic")) := "lexicographic", column :: posint := 1, reverse :: truefalse := false } ) local compare; if ordering = "lexicographic" then compare := (x,y)->evalb(`if`(reverse,x[column]>=y[column],x[column]<=y[column])); else compare := (x,y)->`if`(reverse,ordering(x[column],y),ordering(y,x)); end if; sort( input, compare ); end proc: