apply - Freyens
Home Informatique Projets CV WOT Mmm J'aime Coup de gueule Famille Web Radio Belge B&M Art-NFT

C'est une pub! Ce thême est basé sur w3 css.

Oui vous êtes capable de modifier ce thême

Cool? Oui, avec plein d'exemples faciles à comprendre et à modifier.

Aller sur W3.CSS Tutorial c'est en anglais mais google peux traduire les pages.

apply

La curiosité n’est pas un vilain défaut mais une qualité fondamentale.

Applique une fonction anonyme. Anonyme s'entend au sens ou la fonction, qui est fondamentalement identique à une procédure, n'existe que le temps de son utilisation. La commande apply est donc particulièrement utile pour écrire des commandes à usage unique.

Mais la vocation première d'apply est d'apporter les mécanismes nécessaires à la programmation fonctionnelle et au lambda-calcul en Tcl.

Utilisation :

 apply func ?arg1 arg2 ...?

func doit impérativement être une liste de 2 éléments {args body} (comme pour une proc) ou 3 éléments {args body namespace}.

La commande apply applique la fonction func aux arguments arg1 arg2 ... et retourne le résultat.

Manuel :

 http://www.tcl.tk/man/tcl8.5/TclCmd/apply.htm

Pour plus de clarté dans les exemples ci-dessous, j'ai essayé de laisser la fonction dans la commande [list ... ] avec le body indenté comme il le serait dans une procédure. Les lignes qui commence par → sont les résultats des commandes.

Exemple simple :

 apply [list {a b} {
     puts "$a aime $b"
 }] papa maman
 → papa aime maman

Exemple avec un namespace :

 namespace eval ::testNS {}
 apply [list {x} {
     variable testVar
     set testVar [expr {$x*$x}]
     return
 } ::testNS] 5
 set ::testNS::testVar
 → 25

Exemples plus complexes :

Ce premier exemple montre que l'argument spécial args est valable pour apply.

 apply [list {args} {
     set r {}
     foreach arg $args {
         lappend r [string length $arg]:$arg
     }
     return $r
 }] a bb ccc dddd
 → 1:a 2:bb 3:ccc 4:dddd

Ce deuxième exemple (écrit par Andy Goth) ne pourrait pas être écrit simplement sans apply à moins d'écrire une procédure de tri qui va polluer l'espace global, peut-être pour une unique utilisation.

 lsort -command {apply {{a b} {
     set result [expr {[string length $a] - [string length $b]}]
     if {$result == 0} {
         set result [string compare $a $b]
     }
     return $result
 }}} {orange red yellow green blue indigo violet}
 → red blue green indigo orange violet yellow