XLOGO dispose de sept primitives permettant d’effectuer des boucles : repete, repetepour et tantque,
pourchaque, repetetoujours, repetetantque et repetejusqua.
repete n liste_d_instruction |
|
n est un entier et liste_d_instruction est une liste contenant des instruction à exécuter. L’interpréteur LOGO
va effectuer n fois les commandes contenues dans la liste : cela évite ainsi de recopier n fois la même
instruction !
Ex :
repete 4 [avance 100 tournegauche 90] # Un carré de côté 100
repete 6 [avance 100 tournegauche 60] # Un hexagone de côté 100
repete 360 [avance 2 tournegauche 1] # Un euh... 360-gone de côté 2
# Bref, quasiment un cercle !
Au sein d’une boucle repete, est définie une variable interne compteur. Celle-ci désigne le numéro de l’itération en
cours (la première itération étant numérotée 1).
repete 3 [ec compteur]
1
2
3
repetepour joue le rôle des boucles for dans d’autres langages de programmation.
Cette boucle consiste à affecter à une variable un certain nombre de valeurs comprises dans un intervalle donné
suivant un incrément donné.
liste1 contient trois paramètres : le nom de la variable, la borne initiale, la borne finale.
On peut rajouter un quatrième argument optionnel désignant l’incrément (le pas avec lequel la variable défile). S’il
est omis, il est par défaut de 1. Quelques exemples d’utilisation :
repetepour [i 1 4][ec :i*2]
2
4
6
8
# A présent on fait varier i entre 7 et 2 en descendant de 1.5 à chaque fois
# noter l’incrément négatif
# On affiche ensuite i son carré.
repetepour [i 7 2 -1.5 ][ec liste :i puissance :i 2]
7 49
5.5 30.25
4 16
2.5 6.25
tantque liste_a_tester liste_d_instruction |
|
liste_a_tester est une liste contenant une suite d’instruction rendant un booléen. liste_d_instruction est une liste
contenant des instructions à exécuter. L’interpréteur LOGO exécutera continuellement liste_d_instruction tant que
liste_a_tester rend vrai.
Ex :
tantque ["vrai] [td 1] # La tortue tourne sur elle-même
# Un exemple qui nous permet d’épeler l’alphabet à l’envers
donne "liste "abcdefghijklmnopqrstuvwxyz
tantque [non vide? :liste] [ec dernier :liste donne "liste saufdernier :liste]
pourchaque nom_variable liste_ou_mot commande |
|
Cette primitive permet de décrire tous les éléments d’une liste ou tous les caractères d’un mot puis exécute à
chaque fois le contenu de la liste des commandes.
pourchaque "i "XLOGO [ecris :i]
X
L
O
G
O
pourchaque "i [a b c] [ecris :i]
a
b
c
repetetoujours,repetetjs liste_instructions |
|
Répète indéfiniment une liste d’instructions.
repetetoujours [av 1 td 1]
Attention : cette primitive est à utiliser avec prudence du fait de la boucle infinie !
repetetanque liste1 liste2 |
|
Répète une séquence d’instructions contenue dans liste1 tant que liste2 est vraie.
La principale différence avec la primitive tantque est qu’ici, la liste d’instructions est exécutée au moins une fois
même si le test de sortie est faux.
donne "i 0
repetetantque [ec :i donne "i :i+1] [:i<4]
0
1
2
3
4
repetejusqua liste1 liste2 |
|
Répète une séquence d’instructions contenue dans liste1 jusqu’à ce que liste2 soit vraie.
donne "i 0
repetejusqua [ec :i donne "i :i+1] [:i>4]
0
1
2
3
4