<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
  <head>
    <title>foreach</title>
  </head>

  <body>
    <h1>foreach</h1>

    <p> Команда цикла по элементам одного или нескольких списков.</p>

    <h2><a name=СИНТАНСИС></a>СИНТАКСИС</h2>

    <pre>
      <strong>foreach</strong> <em>varname</em> <em>list</em> <em>body</em> 
      <strong>foreach</strong> <em>varlist1</em> <em>list1</em> ?<em>varlist2</em> <em>list2</em>...? <em>body</em>
    </pre>

    <h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2>

    <p> Команда организует выполнение цикла, в котором переменные
      цикла последовательно принимают все значения из списков
      значений. В простейшем случае имеется одна переменная цикла
      <em>varname</em> и один список значений <em>list</em> для присвоения
      переменной цикла. Аргумент <em>body</em> есть скрипт Tcl. Для
      каждого элемента списка <em>list</em>, по очереди с первого до
      последнего, <strong>foreach</strong> присваивает содержимое очередного
      элемента списка переменной <em>varname</em> и затем вызывает
      интерпретатор Tcl для исполнения <em>body</em>.
    </p>
    
    <p> В общем случае в команде может быть указано несколько списков
      значений (например, <em>list1</em> и <em>list2</em>), и каждый из
      них может быть связан с одной переменной или со списком
      переменных цикла (например, <em>varlist1</em> и
      <em>varlist2</em>). Во время каждой итерации переменные каждого
      списка переменных принимают значения последовательных элементов
      соответствующего списка значений. Значения из списков значений
      используются последовательно от первого до последнего, и каждое
      значение используется только один раз.  Общее число итераций
      выбирается таким, чтобы использовать все значения из всех
      списков значений. Если список значений не содержит достаточного
      числа значений для всех связанных с ним переменных цикла, вместо
      недостающих элементов используются пустые значения.
    </p>

    <p> Внутри скрипта <em>body</em> можно использовать команды <a
      href=break.html><strong>break</strong></a> и <a href=
      continue.html><strong>continue</strong></a>, аналогично команде
      <a href=for.html><strong>for</strong></a>.
    </p>
    
    <p> Команда <strong>foreach</strong> возвращает пустую строку.</p>

    <h2><a name=ПРИМЕРЫ></a>ПРИМЕРЫ</h2>

    <p> В цикле используются переменные цикла i и j для цикла по
      элементам одного списка </p>
    <pre>
        set x {}
        foreach {i j} {a b c d e f} { 
          lappend x  
        }
    </pre>

    <p>В результате величина x равна &quot;a d c f e&quot;.</p>
      
    <p>При вычислении цикла используются три итерации.</p>

    <p> В цикле переменные цикла i и j используются для различных
      списков значений. </p>

    <pre>
        set x {}
        foreach i {a b c} j {d e f g} { 
          lappend x  
        }
    </pre>

    <p>В результате величина x равна &quot;a d b e c f {} g&quot;. </p>

    <p>При вычислении цикла используются четыре итерации.</p>

    <p>Обе предыдущие формы скомбинированы в следующем цикле</p>

    <pre>
        set x {}
        foreach i {a b c} {j k} {d e f g} { 
          lappend x   
        }
    </pre>

    <p>В результате величина x равна &quot;a d e b f g c {} {}&quot;.</p>

    <p> При вычислении цикла используются три итерации.</p>
  </body>
</html>