procedure main() X := [ [1,2,3], [2,3,1], [3,1,2]) # A list of lists Sort(X) # vanilla sort Sort(X,"ordering","numeric","column",2,"reverse") # using optional parameters end procedure Sort(X,A[]) # A[] provides for a variable number of arguments while a := get(A) do { case a of { "ordering" : op := case get(A) | runerr(205,a) of { "lexicographic"|"string": "<<" "numeric": "<" default: runerr(205,op) } "column" : col := 0 < integer(col := get(A)) | runerr(205,col) "reverse" : reverseorder := reverse default: runerr(205,a) } return (\reverseorder|1)(bubblesortf(X,\c|1,\op|"<<")) # reverse or return the sorted list end