Tcl includes two commands for looping, the while
and for
commands. Like the if
statement, they evaluate their test
the same way that the expr
does.
In this lesson we discuss the while
command, and in the next lesson, the for
command. In most circumstances where
one of these commands can be used, the other can be used as
well.
while
test
body
The while
command evaluates test
as an expression. If test
is true, the code in body
is executed. After the code in body
has been executed, test
is evaluated again.
A continue
statement within body
will stop the execution of the code and
the test will be re-evaluated. A break
within body
will break out of the while loop, and
execution will continue with the next line of code after body
In Tcl everything is a command, and everything
goes through the same substitution phase. For this reason, the
test
must be placed within braces. If
test
is placed within quotes, the
substitution phase will replace any variables with their current
value, and will pass that test to the while
command to evaluate, and since the
test has only numbers, it will always evaluate the same, quite
probably leading to an endless loop!
Look at the two loops in the example. If it weren't for the break command in the second loop, it would loop forever.
set x 1 # This is a normal way to write a Tcl while loop. while {$x < 5} { puts "x is $x" set x [expr {$x + 1}] } puts "exited first loop with X equal to $x\n" # The next example shows the difference between ".." and {...} # How many times does the following loop run? Why does it not # print on each pass? set x 0 while "$x < 5" { set x [expr {$x + 1}] if {$x > 7} break if "$x > 3" continue puts "x is $x" } puts "exited second loop with X equal to $x"