tcl
Strutture di controllo
Ricerca…
Sintassi
- se expr1? allora? body1 elseif expr2? then? body2 ...? altro? ? BodyN?
- per testare il prossimo corpo
- mentre il corpo del test
- foreach varlist1 list1? varlist2 list2 ...? corpo
Osservazioni
Aggiunta di una nuova struttura di controllo a Tcl
In Tcl, una struttura di controllo è fondamentalmente solo un altro comando. Questa è una possibile implementazione di un do ... while / do ... until struttura di controllo.
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"
}
}
}
Comune per entrambi i tipi di do loops è che lo script denominato body verrà sempre eseguito almeno una volta, quindi lo facciamo subito. Il uplevel 1 $body invocazione significa "esegui lo script a livello di stack del chiamante". In questo modo, tutte le variabili utilizzate dallo script saranno visibili e tutti i risultati prodotti rimarranno al livello del chiamante. Lo script quindi seleziona, in base al parametro della keyword , se iterare mentre una condizione è vera o finché non è falsa, che è la stessa cosa dell'iterazione mentre la negazione logica della condizione è vera. Se viene fornita una parola chiave imprevista, viene generato un messaggio di errore.
se / mentre / per
se expr1 ? allora? body1 elseif expr2 ? then? body2 ...? altro? ? bodyN?
exprN è un'espressione che valuta un valore booleano. bodyN è una lista di comandi.
set i 5
if {$i < 10} {
puts {hello world}
} elseif {$i < 70} {
puts {enjoy world}
} else {
puts {goodbye world}
}
per testare il prossimo corpo
start , next e body sono liste di comandi. test è un'espressione che valuta valori booleani.
Il comando break romperà fuori dal giro. Il comando continue salterà la prossima iterazione del ciclo.
L'uso comune è:
for {set i 0} {$i < 5} {incr i} {
puts "$i: hello world"
}
Poiché start e next sono elenchi di comandi, può essere presente qualsiasi comando.
for {set i 0; set j 5} {$i < 5} {incr i; incr j -1} {
puts "i:$i j:$j"
}
mentre il corpo del test
Il test è qualsiasi espressione che valuti un valore booleano. Mentre il test è vero, il corpo viene eseguito.
set x 0
while {$x < 5} {
puts "hello world"
incr x
}
Il comando break romperà fuori dal giro. Il comando continue salterà la prossima iterazione del ciclo.
set lineCount 0
while {[gets stdin line] >= 0} {
puts "[incr lineCount]: $line"
if { $line eq "exit" } {
break
}
}
Elenco iterazione: foreach
foreach varlist1 lista1? varlist2 list2 ...? corpo
foreach è una potente struttura di controllo che consente il loop su un elenco o più elenchi.
set alpha [list a b c d e f]
foreach {key} $alpha {
puts "key: $key"
}
Possono essere specificati più nomi di variabili.
set alphaindexes [list a 1 b 2 c 3 d 4 e 5 f 6]
foreach {key num} $alphaindexes {
puts "key:$key num:$num"
}
Più elenchi possono essere ripetuti allo stesso tempo.
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"
}