Для цикла с двумя переменными в TCL - PullRequest
0 голосов
/ 15 марта 2012

Я хочу преобразовать следующий код c в TCL.

int a[10],b[10];
int n=20

for (i=1,j=1; i<=n; i+=2,j++)
{
  b[j]=a[i];
}

Мне нужно изменить это для цикла на TCL, я не хочу использовать функцию foreach в TCL ... Есть ли TCLдля структуры цикла позволяют две переменные цикла ???

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Вы видели обсуждение здесь :

  set n 6
  for {
              set  i     1
              set  j     1
          } {
              $i < $n
          } {
              incr i
              incr j
          } {
              puts "$i $j"
   }
2 голосов
/ 15 марта 2012

Это не дает именно того, что вы ищете, но, учитывая, что вы приехали из C, где вам нужно иметь целевой массив для начала ... возможно, он может достичь вашей реальной цели.

Цикл foreach может принимать в качестве переменной хранения список имен. Каждое имя получает одно из значений из списка ввода. Таким образом, вы можете использовать его для перебора нескольких значений из списка ввода каждый раз:

set result {}
foreach {x1 x2} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20} {
    lappend result $x1
}
puts $result
# 1 3 5 7 9 11 13 15 17 19

Абсолютно не имеет отношения к вашей проблеме, но также приятно то, что она может принимать несколько имен и списков переменных:

set result {}
foreach {a1 a2} {1 2 3 4 5 6} b {A B C} {
    lappend result $a1 $b $a2 -
}
puts $result
# 1 A 2 - 3 B 4 - 5 C 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...