2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
35
Task/Optional-parameters/ALGOL-68/optional-parameters.alg
Normal file
35
Task/Optional-parameters/ALGOL-68/optional-parameters.alg
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# as the options have distinct types (INT, BOOL and PROC( STRING, STRING )INT) the #
|
||||
# easiest way to support these optional parameters in Algol 68 would be to have an array #
|
||||
# with elements of these types #
|
||||
# See the Named Arguments sample for cases where the option types are not distinct #
|
||||
|
||||
# default comparison function #
|
||||
PROC default compare = ( STRING a, b )INT: IF a < b THEN -1 ELIF a = b THEN 0 ELSE 1 FI;
|
||||
|
||||
# sorting procedure #
|
||||
PROC configurable sort = ( [,]STRING data, []UNION( INT, BOOL, PROC( STRING, STRING )INT ) options )VOID:
|
||||
BEGIN
|
||||
# set initial values for the options #
|
||||
INT sort column := 2 LWB data;
|
||||
BOOL reverse sort := FALSE;
|
||||
PROC( STRING, STRING )INT comparator := default compare;
|
||||
# overide from the supplied options #
|
||||
FOR opt pos FROM LWB options TO UPB options DO
|
||||
CASE options[ opt pos ]
|
||||
IN ( PROC( STRING, STRING )INT p ): comparator := p
|
||||
, ( INT c ): sort column := c
|
||||
, ( BOOL r ): reverse sort := r
|
||||
ESAC
|
||||
OD
|
||||
# do the sort .... #
|
||||
END # configurable sort # ;
|
||||
|
||||
# example calls #
|
||||
[ 1 : 2, 1 : 3 ]STRING data := ( ( "a", "bb", "cde" ), ( "x", "abcdef", "Q" ) );
|
||||
|
||||
# sort data, default comparison, first column, reverse order #
|
||||
configurable sort( data, ( TRUE ) );
|
||||
# sort data, second column, ignore first chaacter when sorting, normal order #
|
||||
configurable sort( data, ( 2, ( STRING a, STRING b )INT: default compare( a[ LWB a + 1 : ], b[ LWB b + 1 : ] ) ) );
|
||||
# default sort #
|
||||
configurable sort( data, () )
|
||||
Loading…
Add table
Add a link
Reference in a new issue