Optional parameters: Difference between revisions

Content deleted Content added
new task
 
+ Tcl
Line 48:
CL-USER> (sort-table *data* :ordering (lambda (a b) (> (length a) (length b))))
(("zap" "zip" "Zot") ("a" "b" "c") ("" "q" "z"))</lang>
 
 
=={{header|Tcl}}==
 
In Tcl, optional arguments are collected when the last argument
to a proc definition is called "args". The ''lsort'' command has a similar API, but with different keywords, so we adapt them.
<lang Tcl>package require Tcl 8.5
 
proc tablesort {table args} {
array set opt {-ordering "" -column 0 -reverse 0}
array set opt $args
set pars [list -index $opt(-column)]
if $opt(-reverse) {lappend pars -decreasing}
if {$opt(-ordering) ne ""} {lappend pars -command $opt(-ordering)}
lsort {*}$pars $table
}
 
% tablesort $data
{"" q z} {a b c} {zap zip Zot}
 
% tablesort $data -column 1
{a b c} {"" q z} {zap zip Zot}
 
% tablesort $data -column 0
{"" q z} {a b c} {zap zip Zot}
 
% tablesort $data -column 0 -reverse 1
{zap zip Zot} {a b c} {"" q z}
 
% tablesort $data -ordering {
apply {{a b} {expr {[string length $b]-[string length $a]}}}
}
{zap zip Zot} {a b c} {"" q z}
</lang>