:TITLE: Looping 101 - While loop
;#
;# RCSID: $Header: /cvsroot/tcl/tcltutorial/original/Tcl9.lsn,v 1.1 2004/11/04 16:01:14 davidw Exp $
;# Copyright (c) 1995 Clif Flynt
;# 9300 Fleming Rd.
;# Dexter, MI 48130
;# clif@cflynt.com
;# See file "NOTICE" for licensing terms.
;#
:LESSON_TEXT_START_LEVEL 0:
Syntax: while test body
While evaluates test as an expression. If test is
true, the code in body is executed. After the code in body
has been executed, testis 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.
:TEXT_END:
:LESSON_TEXT_START_LEVEL 1:
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.
Syntax: 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, testis 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 procedure, 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
procedure to evaluate, and since the test has only numbers, it will always
evaluate the same.
Look at the two loops in the example. If it weren't for the break command in the second loop, it would loop forever. :TEXT_END:
:LESSON_TEXT_START_LEVEL 2: Another common feature of computer languages is a looping construct. This is a way for the program to do the same set of operations over and over with different values and not make the programmer type all the lines of code.
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.
The syntax for the while command is:
Syntax: while test body
When the Tcl interpreter encounters a while command, it evaluates the test
immediately. If the test evaluates to true, then the code within
body is executed. After the code is body has been executed,
test is evaluated again. If test is still true, then body
is evaluated yet again. This process continues until test evaluates
to false, or a break command is encountered.
Break and continue are two commands that modify the behavior
of a loop. When a break is encountered the interpreter exits the loop
and continues with the next line of code after the loop. When a continue is
encountered, the interpreter goes back to the test, and does not execute
the rest of the code within body.
In TCL *everything* is a procedure, 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 procedure to
evaluate, and since the test has only numbers, it will always evaluate
the same.
For example - while {$x < 5} is passed to the while command as "$x < 5",
but while "$x < 5" would have the current value of x substituted for $x,
and (if x == 1) "1 < 5" would be passed to the while procedure.
Since 1 is always less than 5, this code would loop forever.
Look at the two loops in the example. If it weren't for the break command in the second loop, it would loop forever. :TEXT_END:
:CODE_START: 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" :TEXT_END: