XLOGO tiene tres primitivas que permiten la construcción de bucles: repite, repitepara y mientras.
Esta es la sintaxis para repite:
repite n [ lista_de_comandos ]n es un número entero y lista_de_commandos es una lista que contiene los comandos a ejecutarse. El intérprete XLOGO ejecutará la secuencia de comandos de la lista n veces. Esto evita copiar los mismos comandos repetidas veces.
Ejemplos:
repite 4 [avanza 100 giraderecha 90]
# un cuadrado de lado 100
repite 6 [avanza 100 giraderecha 60]
# un hexágono de lado 100
repite 360 [avanza 2 giraderecha 1]
# abreviando, casi un círculo
Observa que con el bucle repite, se define una variable interna contador o cuentarepite, que determina el número de la iteración en curso (la primera iteración está numerada con el 1)
repite 3 [escribe cuentarepite] repite 3 [escribe contador]proporcionan ambas
1 2 3
repitepara hace el papel de los bucles for en otros lenguajes de programación. Consiste en asignar a una variable un número determinado de valores comprendidos en un intervalo y con un incremento (paso) dados. Su sintaxis es:
repitepara [ lista1 ] [ lista2 ]La lista1 contiene tres parámetros: el nombre de la variable y los límites inferior y superior del intervalo asignado a la variable. Puede añadirse un cuarto argumento, que determinaría el incremento (el paso que tendría la variable); si se omite, se usará 1 por defecto.
Ejemplo 1:
repitepara [i 1 4] [escribe :i*2]
proporciona
2 4 6 8
Ejemplo 2:
# Este procedimiento hace variar i entre 7 y 2, bajando de 1.5 en 1.5 # nota el incremento negativo repitepara [i 7 2 -1.5] [es lista :i potencia :i 2]
proporciona
7 49 5.5 30.25 4 16 2.5 6.25
Esta es la sintaxis para mientras:
mientras [lista_a_evaluar] [ lista_de_comandos ]lista_a_evaluar es la lista que contiene un conjunto de instrucciones que se evalúan como booleano (cierto o falso). lista_de_comandos es una lista que contiene los comandos a ser ejecutados. El intérprete XLOGO continuará repitiendo la ejecución de lista_de_comandos todo el tiempo que lista_a_evaluar devuelva cierto.
Ejemplos:
mientras ["cierto] [giraderecha 1] # La tortuga gira sobre si misma eternamente.
# Este ejemplo deletrea el alfabeto en orden inverso:
haz "lista1 "abcdefghijklmnñopqrstuvwxyz
mientras [no vacío? :lista1]
[escribe último :lista1 haz "lista1 menosúltimo :lista1]
Un procedimiento se llama recursivo cuando se llama a sí mismo (es un subprocedimiento de sí mismo).
Un ejemplo típico es el cálculo del factorial. En lugar de definir
n! = n * (n - 1) * ...* 3 * 2 * 1,
podemos hacer:
para factorial :número
si :número = 0
[ devuelve 1 ]
[ devuelve :número * factorial (:número - 1) ]
fin
Un segundo ejemplo recursivo es la espiral:
para espiral :lado si :lado > 1250 [ alto ] [ avanza :lado / 500 giraderecha 1 espiral :lado + 1 ] fin