RosettaCodeData/Task/Optional-parameters/Icon/optional-parameters.icon

21 lines
859 B
Plaintext

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