Uniligne en Tcl-Tk

 

Un uniligne est un programme très compact s'écrivant en une seule ligne [1].

En voici un florilège :

Avec Tcl

- Ouverture, lecture et fermeture d'un fichier

 set data [read [set f [open $fichier]]][close $f]

- Test si une variable contient une liste

 proc islist l {expr ![catch {llength $l}]}

- Test si un mot est un palindrome

 proc ispalindrome s {expr {$s eq [string reverse $s]}}

- Test si une chaîne est numérique

 proc isnumeric s {return [regexp {^[+-]?\d*\.?\d+$} $s]}

- La suite de Fibonacci

 proc fib n {expr {$n < 2 ? $n : [fib [expr {$n - 1}]] + [fib [expr {$n - 2}]]}}

 proc fib n {expr {int(([set phi [expr {(1+5**0.5)/2}]]**$n - (1-$phi)**$n)/5**0.5)}}

- Factorielle

 proc ! n {expr {$n<2? 1: $n*[! [incr n -1]]}}

- Test si un nombre est premier

 proc isprime n {expr {$n>1 && ![regexp {^(oo+?)\1+$} [string repeat o $n]]}}

- Test si un nombre entier est une puissance de deux

 proc ispoweroftwo n {return [expr {$n > 0 && ($n & ($n - 1)) == 0}]}

- Test si un nombre est paire

 proc even n {expr {$n & 1 ? 0:1}}

 proc even n {expr {($n % 2) == 0}}

- Pi

 proc pi {} {expr {atan(1) * 4}}

 proc pi {} {expr {acos(-1)}}

- Moyenne d'une liste

 proc moyenne l {expr ([join $l +])/[llength $l].}

- Retourne une liste d'entier compris entre n1 et n2

 proc listint {n1 n2} {subst "$n1[string repeat {[incr n1]} [incr n2 -$n1]]"}

- Signe de x

 proc sgn x {expr {($x>0) - ($x<0)}}

Avec Tk

- Un bouton

 pack [button .b -text Bonjour -command exit]