Buscar..


Sintaxis

  • si expr1? entonces? body1 elseif expr2? entonces? body2 ...? else? ? bodyN?
  • para comenzar a probar el siguiente cuerpo
  • mientras prueba el cuerpo
  • foreach varlist1 list1? varlist2 list2 ...? cuerpo

Observaciones

Documentación: break , for , foreach , if , switch , uplevel , while

Añadiendo una nueva estructura de control a Tcl

En Tcl, una estructura de control es básicamente otro comando. Esta es una posible implementación de un do ... while / do ... until estructura de control.

proc do {body keyword expression} {
    uplevel 1 $body
    switch $keyword {
        while {uplevel 1 [list while $expression $body]}
        until {uplevel 1 [list while !($expression) $body]}
        default {
            return -code error "unknown keyword \"$keyword\": must be until or while"
        }
    }
}

Común para ambos tipos de do loops es que el script denominado body siempre se ejecutará al menos una vez, por lo que lo hacemos de inmediato. El uplevel 1 $body invocación de uplevel 1 $body significa "ejecutar script en el nivel de pila de la persona que llama". De esta manera, todas las variables utilizadas por el script serán visibles, y los resultados producidos se mantendrán en el nivel de la persona que llama. Luego, el script selecciona, en función del parámetro de keyword , si iterar mientras una condición es verdadera o hasta que sea falsa, que es lo mismo que iterar mientras que la negación lógica de la condición es verdadera. Si se da una palabra clave inesperada, se produce un mensaje de error.

si / mientras / para

si expr1 ? entonces? body1 elseif expr2 ? entonces? body2 ...? else? ? bodyN?

exprN es una expresión que se evalúa como un valor booleano. bodyN es una lista de comandos.

set i 5
if {$i < 10} {
  puts {hello world}
} elseif {$i < 70} {
  puts {enjoy world}
} else {
  puts {goodbye world}
}

para comenzar a probar el siguiente cuerpo

Inicio , siguiente y cuerpo son listas de comandos. test es una expresión que se evalúa como valores booleanos.

El comando break se romperá fuera de onda. El comando de continuar pasará a la siguiente iteración del bucle.

El uso común es:

for {set i 0} {$i < 5} {incr i} {
  puts "$i: hello world"
}

Como inicio y las siguientes son listas de comandos, cualquier comando puede estar presente.

for {set i 0; set j 5} {$i < 5} {incr i; incr j -1} {
  puts "i:$i j:$j"
}

mientras prueba el cuerpo

La prueba es cualquier expresión que se evalúa como un valor booleano. Mientras que la prueba es verdadera, el cuerpo es ejecutado.

set x 0
while {$x < 5} {
  puts "hello world"
  incr x
}

El comando break se romperá fuera de onda. El comando de continuar pasará a la siguiente iteración del bucle.

set lineCount 0
while {[gets stdin line] >= 0} {
  puts "[incr lineCount]: $line"
  if { $line eq "exit" } {
    break
  }  
}

Lista de iteración: Foreach

foreach varlist1 list1 ? lista_var2 lista2 ...? cuerpo

Foreach es una poderosa estructura de control que permite recorrer una lista o varias listas.

set alpha [list a b c d e f]
foreach {key} $alpha {
   puts "key: $key"
}

Se pueden especificar múltiples nombres de variables.

set alphaindexes [list a 1 b 2 c 3 d 4 e 5 f 6]
foreach {key num} $alphaindexes {
   puts "key:$key num:$num"
}

Se pueden iterar varias listas al mismo tiempo.

set alpha [list a b c d e f]
set indexes [list 1 2 3 4 5 6]
foreach {key} $alpha {idx} $indexes {
   puts "key: $key idx:$idx"
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow