Академический Документы
Профессиональный Документы
Культура Документы
Antecedentes
Agrupamiento
Las formas de agrupar elementos en Tcl son:
Con "" (bloques entre dobles comillas) se representan cadenas con el
agregado de que se puede intercalar el valor de variables (sustituye el
contenido de la variable) utilizando el smbolo $ seguido del nombre de la
variable.
Con {} (bloques entre llaves) pueden contener cadenas, pero no se pueden
intercalar variables como en el caso de las doble comillas, por ejemplo, en una
consola tcl (invocando tclsh en un terminal):
% set numero 545 ;#Asignacin a la variable numero con 545
545
% puts "El valor es $numero" ;# Con dobles comillas podemos poner el
contenido de la variable numero
El valor es 545
% puts {El valor es $numero} ;# Pero entre llaves muestra el simbolo $
seguido del nombre de la variable
El valor es $numero
Los bloques entre llaves sirven adems para las estructuras de control, ya que
son tratadas como cualquier otro comando.
Los () (parntesis) sirven para encerrar los ndices en las tablas asociativas, o
para agrupar en expresiones aritmticas.
Tipos de variables
Las variables no tienen tipos explcitamente. Sin embargo podemos definir seis
tipos
Booleanas : 0/no/off (en caso de ser falso) y 1/yes/on/ (en caso de ser
verdadero) o un nmero diferente de 0
Nmeros : 1 0 3.14 1.e-10, se tratan como cadenas, salvo en expresiones
aritmticas en que se convierte primero en binario.
Cadenas de caracteres : Bienvenido, "Madame De Labas", 32 , {z 3.14}
Listas : de booleanas, nombres, cadenas o listas (pudiendo anidar listas)
Diccionarios : Son pares clave-valor, similares a las tablas asociativas. Pueden
contener cualquier tipo de dato en el valor. Este tipo de variables se incluye
desde Tcl 8.5 en adelante.
Tablas asociativas : T(clave) M(2,3) que puedan contener los 5 tipos
anteriores, incluso mezclados.
Las cinco primeros tipos son llamados tipos escalares, as que pueden ser
pasados por valor y regresar al llamar a un procedimiento. Los tipos de escalar
se convierten automticamente en el tipo adecuado, por ejemplo, una cadena
puede ser una lista como se ve a continuacin utilizando una consola tcl:
% set frutas albaricoque
% puts $frutas
albaricoque
% set frutas "pomelo naranja banana"
pomelo naranja banana
% puts [lindex $frutas end]
banana
% puts [lindex $frutas 1]
naranja
Una funcin puede devolver una cadena o una lista, pero no una tabla
asociativa ya que no es una variable escalar. Estos pueden ser pasados por
referencia. Los diccionarios se pueden utilizar como un parmetro de un
procedimiento, e incluso puede ser devuelto.
Estructuras de control
Contrariamente a lo que ocurre con otros lenguajes de programacin, las
palabras que se utilizan para las estructuras de control en Tcl no son palabras
reservadas con una sintaxis especial. "for", "if", "while" son procedimientos que
siguen la sintaxis habitual Tcl.
while { unaExpresionLogica } {
unCommando
unCommando
....
}
if {$x<0} {
set x 0
} elseif { $x<5 } {
set x 5
} else {
set x 10
}
for {set i 0} {$i<10} {incr i} {
puts $i
}
foreach i [list "youpii" "aujourd'hui" "il fait beau" "bravo !" "bravo !"] {
puts $i
}
# no es necesario usar el comando list con valores fijos; esto es equivalente
foreach i {"youpii" "aujourd'hui" "il fait beau" "bravo !" "bravo !"} {
puts $i
} foreach a $listaA b $listaB c $listaC {
puts "$a $b $c"
}
foreach {x y} [list Sr Gaston Sra Jeanne Sr Robert Sra Raymonde] {
puts "$x $y"
}
set color azul
switch $color {
rojo { puts "FF0000" }
azul { puts "0000FF" }
verde { puts "00FF00" }
blanco { puts "FFFFFF" }
negro { puts "000000" }
default { puts "desconocido" }
}
Ejemplos
Factorial (estilo de programacin funcional):
proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}}
Hacer la suma de una lista de nmeros
Con un bucle foreach que sigue la lista :
set numeros {10 9 8 7 6 5 4 3 2 1}
set suma 0
foreach i $numeros {
set suma [expr {$suma + $i}]
}
O ms compacto utilizando el comando join en lugar del lazo con foreach :
set suma [expr [join $numeros +]]
Un operador es un caracter como cualquier otro, as que puede ser almacenado
en una variable:
set numeros {10 9 8 7 6 5 4 3 2 1}
foreach opr {+ * - /} {
set resultado [expr [join $numeros $opr]]
puts "El resultado para el operador $opr es $resultado"
}
Descarga de una pgina HTML
package require http
set tok [http::geturl http://mini.net/tcl/540]
puts [http::data $tok]
http::cleanup $tok
Desarrollo y ejecucin
Eclipse corriendo un programa Tcl que utiliza la extensn incr Tcl para la programacin
orientada a objetos.
Desarroll
ado con
XOTcl7
incr Tcl
OTcl
Snit
Tcl