14 lines
454 B
Plaintext
14 lines
454 B
Plaintext
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:
|