Встроенные команды ТCL
foreach
Команда цикла по элементам одного или нескольких списков.
Синтаксис
foreach varname list body
foreach varlist1 list1?varlist2 list2...? body
Описание
Команда организует выполнение цикла, в котором переменные цикла последовательно принимают все значения из списков значений. В простейшем случае имеется одна переменная цикла varname и один список значений list для присвоения переменной цикла. Аргумент body есть скрипт Tcl. Для каждого элемента списка list, по очереди с первого до последнего, foreach присваивает содержимое очередного элемента списка переменной varname и затем вызывает интерпретатор Tcl для исполнения body.
В общем случае в команде может быть указано несколько списков значений (например, list1 и list2), и каждый из них может быть связан с одной переменной или со списком переменных цикла (например, varlist1 и varlist2). Во время каждой итерации переменные каждого списка переменных принимают значения последовательных элементов соответствующего списка значений. Значения из списков значений используются последовательно от первого до последнего, и каждое значение используется только один раз. Общее число итераций выбирается таким, чтобы использовать все значения из всех списков значений. Если список значений не содержит достаточного числа значений для всех связанных с ним переменных цикла, вместо недостающих элементов используются пустые значения.
Внутри скрипта body можно использовать команды break и continue, аналогично команде for.
Команда foreach возвращает пустую строку.
Примеры
В цикле используются переменные цикла i и j для цикла по элементам одного списка:
set х {}
foreach {i j} {a b с d е f} {
lappend x $j $i
}
В результате величина x равна b a d с f е.
При вычислении цикла используются три итерации.
В цикле переменные цикла i и j используются для различных списков значений.
set х {}
foreach i {а b с} j {d е f g} {
lappend x $i $j
}
В результате величина x равна a d b e с f {} g.
При вычислении цикла используются четыре итерации
Обе предыдущие формы скомбинированы в следующем цикле:
set X {}
foreach i {a b с} {j k} {d e f g} {
lappend x $i $j $k
}
В результате величина x равна a d e b f g с {} {}.
При вычислении цикла используются три итерации.