A.12 Loops:

XLOGO has seven primitives which allow the construction of loops: repeat, for , while, foreach, forever, repeatwhile and repeatuntil.

A.12.1 A loop with repeat


repeat n list_of_commands


n is a whole number and list_of_commands is a list containing the commands to execute. The LOGO interpreter will implement the commands in the list n times: that avoids the need to copy the same command n times!
Eg:
repeat 4 [forward 100 left 90]      # A square of side 100  
repeat 6 [forward 100 left 60]      # A hexagon of side 100  
repeat 360 [forward 2 left 1]       # A uh... 360-gon of side 2  
                                           # In short, almost a circle!


repcount


Included in a repeat loop. Its an internal variable. Returns the number of the running iteration. (The first iteration is number 1).
repeat 3 [pr repcount]  
1  
2  
3

A.12.2 A loop with for


for list1 list2


for assigns to a variable some successive values in a fixed range with a choosen increment.
list1 contains three arguments: the variable name, the start value, the end value.
A fourth argument is optionnal representing the increment (the step between two successive values). Default value is 1. Here are a few examples:
for [i 1 4][pr :i*2]  
2  
4  
6  
8  
 
# Now, i is going from 7 to 2 falling down of 1.5 each times  
# Look at the negative increment  
# Then, Displays its square.  
 
for [i 7 2 -1.5 ][pr list :i power :i 2]  
 
7 49  
5.5 30.25  
4 16  
2.5 6.25

A.12.3 A loop with while


while list_to_evaluate list_of_commands


list_to_evaluate is a list containing an instruction set which can be evaluated as a boolean. list_of_commands is a list containing the commands to execute. The LOGO interpreter will continue implementing the list_of_commands so long as the list_to_evaluate is returned as true.
Eg:
 
while ["true] [rt 1]                    # The turtle will turn around  
 
# An example which allows us to spell the alphabet in reverse  
 
make "list "abcdefghijklmnopqrstuvwxyz  
while [not empty? :list] [pr last :list make "list butlast :list]

A.12.4 A loop with foreach


foreach variable_name arg1 instructions


The variable has for successive value the item from a list, or the character from a word. The instructions are repeated for each value of the variable.
foreach "i "XLOGO [print :i]  
X  
L  
O  
G  
O  
foreach "i [a b c] [print :i]  
a  
b  
c  
 
make "sum 0 foreach "i 12345 [make "sum :sum+:i] print :sum  
15

A.12.5 A loop with forever


forever instructions_list


Repeats forever a block of instructions waiting for a command to stop the loop.
Eg: forever [fd 1 rt 1]

Be careful when you use this primitive because of the infinite loop!

A.12.6 A loop with repetewhile


repeatwhile dowhile list1 list2


Repeats a block of instructions contained in list1 while list2 is true.
The main difference with the primitive while is that the bloack of instructions is at least executed one times even if list2 is false.
make "i 0  
repeatwhile [pr :i make "i :i+1] [:i<4]  
0  
1  
2  
3  
4

A.12.7 A loop with repeatuntil


repeatuntil dountil list1 list2


Repeats a block of instructions contained in list1 until list2 will be true.
make "i 0  
repeatuntil [pr :i make "i :i+1] [:i>4]  
0  
1  
2  
3  
4