### 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