tcl
Контрольные структуры
Поиск…
Синтаксис
- если expr1? то? body1 elseif expr2? то? body2 ...? else? ? BodyN?
- для запуска теста следующего тела
- а тестовое тело
- foreach varlist1 list1? varlist2 list2 ...? тело
замечания
Добавление новой структуры управления в Tcl
В Tcl структура управления - это просто еще одна команда. Это одна из возможных реализаций do ... while / do ... until структуры управления.
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"
}
}
}
Общим для обоих видов do -loops является то, что скрипт с именем body всегда будет выполняться хотя бы один раз, поэтому мы сразу это сделаем. uplevel 1 $body означает «выполнить скрипт на уровне стека вызывающего». Таким образом, все переменные, используемые скриптом, будут видны, и любые полученные результаты останутся на уровне вызывающего абонента. Затем сценарий выбирает на основе параметра keyword , следует ли итерации, пока условие истинно или пока оно не будет ложным, что совпадает с итерацией, в то время как логическое отрицание условия истинно. Если задано непредвиденное ключевое слово, создается сообщение об ошибке.
если / while / для
если expr1 ? то? body1 elseif expr2 ? то? body2 ...? else? ? bodyN?
exprN - выражение, которое вычисляет логическое значение. bodyN - список команд.
set i 5
if {$i < 10} {
puts {hello world}
} elseif {$i < 70} {
puts {enjoy world}
} else {
puts {goodbye world}
}
для запуска теста следующего тела
start , next и body - списки команд. test - выражение, которое вычисляется в виде булевых значений.
Команда break выйдет из цикла. Команда continue перейдет к следующей итерации цикла.
Общее использование:
for {set i 0} {$i < 5} {incr i} {
puts "$i: hello world"
}
Поскольку start и next являются списками команд, любая команда может присутствовать.
for {set i 0; set j 5} {$i < 5} {incr i; incr j -1} {
puts "i:$i j:$j"
}
а тестовое тело
Тест представляет собой любое выражение, которое вычисляет логическое значение. Пока тест верен, тело выполняется.
set x 0
while {$x < 5} {
puts "hello world"
incr x
}
Команда break выйдет из цикла. Команда continue перейдет к следующей итерации цикла.
set lineCount 0
while {[gets stdin line] >= 0} {
puts "[incr lineCount]: $line"
if { $line eq "exit" } {
break
}
}
Список итераций: foreach
Еогеасп varlist1 песни1? varlist2 list2 ...? тело
foreach - это мощная структура управления, которая позволяет циклически перебирать список или несколько списков.
set alpha [list a b c d e f]
foreach {key} $alpha {
puts "key: $key"
}
Можно указать несколько имен переменных.
set alphaindexes [list a 1 b 2 c 3 d 4 e 5 f 6]
foreach {key num} $alphaindexes {
puts "key:$key num:$num"
}
Одновременно можно перебирать несколько списков.
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"
}