Richard Suchenwirth 2007-03-28 - Voilà une collection de procédures tout petites, consistant d'une seule ligne, mais d'une certaine utilité :)
Simplification de interp alias:
proc alias {name args} {eval [linsert $args 0 interp alias {} $name {}]}
Répétition d'une action:
proc every {ms body} {eval $body; after $ms [info level 0]}
Voir si un élément est en une liste (avec 8.5, on utiliserait l'opérateur in):
proc in {list el} {expr {[lsearch -exact $list $el]>=0}}
Combinateur K, pour préserver un résultat intermédiaire (Exemple: voir readfile en bas)
proc K {a b} {set a}
Retirer certains éléments d'une liste:
proc lfilter {el list} {lsearch -all -inline -exact -not $list $el}
Choisir au hasard un élément d'une liste:
proc lpick list {lindex $list [expr {int(rand()*[llength $list])}]}
Minimum arithmétique:
proc min args {lindex [lsort -real $args] 0}
Lire un fichier de texte en un coup (nécessite le Combinateur K plus haut):
proc readfile name {K [read [set f [open $name]]] [close $f]}
Signe d'un nombre:
proc sgn x {expr {($x>0)-($x<0)}}
Formatteur XML, avec example:
proc < {name args} {return <$name>[join $args ""]</$name>} % < foo [< bar 42] [< grill 123] <foo><bar>42</bar><grill>123</grill></foo>
Voir aussi simplicité
Kroc 28 Mars 2007 - J'avais déjà présentée lfilter sous le nom de lremove : http://wfr.tcl.tk/fclt/index.php?group=1&id=766