next up previous contents index
Siguiente: Modo multitortuga Subir: Manual del Usuario Anterior: Condicionales   Índice General   Índice de Materias

Subsecciones


Bucles y recursividad

XLOGO tiene tres primitivas que permiten la construcción de bucles: repite, repitepara y mientras.


Bucle con repite

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


Bucle con repitepara

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


Bucle con mientras

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]


Recursividad

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:

Factorial

En XLOGO:

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
Image Espiral


next up previous contents index
Siguiente: Modo multitortuga Subir: Manual del Usuario Anterior: Condicionales   Índice General   Índice de Materias
Álvaro Valdés 2008-03-13