|
|
DEL
CLAVO AL ORDENADOR CON LOGO
Parte
I. FUNDAMENTOS DE LOGO El
lenguaje Logo se presenta en distintos formatos, que depende del
fabricante del entorno; los más utilizados son ACTILOGO y WIN-LOGO
fundamentalmente; el win-logo puede usarse en entorno del DOS y también
en el de WINDOWS. Como últimamente la mayoría de los programas se
desarrollan para el entorno Windows y el manejo de este sistema operativo
es muy asequible para cualquier usuario, en el este curso se ha optado por
hacer uso de WIN-LOGO para Windows. Para
poder ejecutar el WIN-LOGO son necesarios, además de los materiales genéricos
que requiere el entorno Windows sobre el que este lenguaje trabaja, los
siguientes elementos: un ordenador compatible con IBM 386 o superior, dos
Mb de memoria extendida y dos Mb de disco duro libres; opcionalmente serán
necesarias una impresora y una tarjeta de sonido. 1.
WINLOGO USA VENTANAS WinLogo
posee varias ventanas o áreas de trabajo que pueden ser utilizadas para
determinadas tareas. Estas ventanas son: Gráficos
Textos Trabajo
Formas Edición
Trazado
Variable Cuando
se inicia el programa se presentan las ventanas o áreas de trabajo más
importantes, que son: la ventana de Gráficos (mundo de las tortugas), la
ventana de Textos (zona en la que Logo escribe sus mensajes) y ventana
correspondiente al área de Trabajo (zona en la que el usuario escribe sus
mensajes). Cómo
trabajar con ventanas Las
ventanas no están siempre en la misma posición: se pueden mover, cambiar
de tamaño, superponer o cerrar. Solamente
se puede actuar sobre las ventanas activas. Para determinar cuándo una
ventana se encuentra activa es suficiente comprobar que su barra superior
se encuentra resaltada. Para
activar una ventana basta colocar el puntero del ratón sobre ella y
pulsar su botón izquierdo; el camino indicado sirve solamente si la
ventana está presente en pantalla; en caso contrario, es decir cuando la
ventana no esté en pantalla, basta elegir la opción Ventanas de la barra
de menús y seleccionar el nombre de la ventana que se quiere activar; la
ventana así activada se superpondrá a las ventanas que aparecían antes
en la pantalla. Para
desactivar una ventana basta con activar una nueva. Para
cerrar una determinada ventana en primer lugar ésta debe aparecer como
activa; después, la ventana puede cerrarse utilizando alguno de los
procedimientos siguientes:
Para
mover una ventana hay que situar el puntero del ratón sobre el título de
la ventana y mantener pulsado el botón izquierdo del ratón mientras la
ventana se desplaza hasta la posición deseada. Una vez que la ventana ha
llegado hasta el lugar deseado basta soltar el botón. Para
modificar el tamaño de una ventana lo primero que hay que hacer es
activarla y después situar el puntero del ratón sobre uno de sus lados
hasta que aparece una doble flecha; pulsado el botón del ratón el borde
de la ventana puede ser arrastrado hasta que éste alcance el tamaño
deseado. Si
se desea restaurar automáticamente una ventana al número y disposición
iniciales, basta elegir en la barra de Menú la opción Ventanas y
seleccionar, dentro de ella, el comando "Restaurar Entorno". 2.
EL MODO DIRECTO Las
palabras clave que se usan para comunicarse con el entorno se llaman
PRIMITIVAS. Las primitivas pueden escribirse en la ventana de TRABAJO.
Cuando el objetivo de la primitiva sea dibujar, sus resultados se muestran
en el área de GRÁFICOS y, por el contrario, aparecen en el área de
TEXTOS cuando la primitiva tiene por objeto dibujar. Con
el ejemplo siguiente quedará más claro el funcionamiento del modo
directo: Si
se escribe: La
tortuga dibujará una recta de cuarenta unidades de longitud en la ventana
GRÁFICOS, ya que el resultado de la primitiva AVANZA es un dibujo. Prueba
con otra primitiva, escribe ESCRIBE "HOLA y después pulsa [INTRO].
En la ventana de TEXTOS aparecerá escrita la palabra HOLA. Las órdenes
de escritura se ejecutan en la zona de TEXTOS. RECUERDA: Las
órdenes se escriben en la ventana de Trabajo. Logo muestra sus mensajes y
textos en la ventana de Textos, sus gráficos los representa en la ventana
de Gráficos. Si
se comete un error al escribir una primitiva como por ejemplo ordenar a la
primitiva una acción incompleta, Logo envía su mensaje de error a través
de la ventana de TEXTOS. Para comprobarlo se teclea: ESSCRIBE "HOLA;
la palabra escribe se ha escrito con dos eses; el ordenador en este caso
emitirá un mensaje de error en la ventana de TEXTOS. El mensaje de error
que va a parecer es: no se cómo hacer ESSCRIBE. Realiza
las pruebas siguientes: escribe los textos tal y como aparecen a
continuación y pulsa [INTRO] después de cada línea. AVANZA
80 AV
80 BORRAPANTALLA AV
40 GIRADERECHA
90 AV
40 GD 90 BP
AV 60 GIRAIZQUIERDA
45 RETROCEDE
60 GI
90 RE 56 ESCRIBE
"CASA ESCRIBE
[LA CASA ES GRANDE] BP
ACTIVIDAD
RECOMENDADA Dibuja
un cuadrado y un triángulo haciendo uso de las primitivas que has visto
hasta ahora. Prueba también a hacer una circunferencia. Con
el ejercicio anterior se pretendía que practicases con un conjunto de
primitivas y sus abreviaturas. Escribe ahora las líneas de la lista
siguiente y observa los mensajes que aparecen en la ventana de Textos: AVANZA RETROCEDE GIRAIZQUIERDA Analiza
los mensajes escritos en el zona de textos; el error se produce porque las
primitivas requerían un parámetro para su correcta definición; recuerda
que existen otras primitivas para la que no es necesario definir ningún
parámetro. Escribe las órdenes anteriores completándolas con un parámetro
correcto. Primitivas
que has estudiadas hasta el momento:
También
se pueden escribir dos o más órdenes en una misma línea. Por ejemplo: BORRAPANTALLA
AVANZA 40 GIRADERECHA 90 AVANZA 60 Después
de escribir la línea anterior en la ventana de trabajo y pulsar [INTRO],
se ejecutarán las cuatro instrucciones. Edición
en modo directo También
se puede repetir una orden directa pulsando [INTRO] después de haber
colocado el cursor en la línea en la que la orden se había ejecutado. ACTIVIDAD
GUIADA Escribe
la siguiente orden y pulsa [INTRO]: El
cursor baja una línea y el programa espera a que escribas otra orden.
Sube el cursor a la línea anterior y vuelve a pulsar [INTRO]. Repite la
acción varias veces, verás cómo se ejecuta como si la hubieras escrito
de nuevo. Como
se ha explicado anteriormente, en una línea se pueden escribir varias órdenes
seguidas. Logo las ejecuta una tras otra. Borra
la pantalla de Gráficos con la orden BP y, en una línea en blanco
escribe las dos órdenes siguientes y pulsa [INTRO]: AV
60 GD 90 Sube
el cursor a la línea anterior y pulsa [INTRO]. Repite la operación dos
veces más. Cuando concluyas el ejercicio observa que Logo ha dibujado un
cuadrado. Esta
posibilidad permite corregir un error sin necesidad de reescribir toda la
línea de órdenes en la que aparecía dicho error. Escribe
y ejecuta: Logo
envía un mensaje a la ventana de textos el siguiente mensaje: no
sé como hacer para HESCRIBE Sube
el cursor a la línea errónea, suprime la H y pulsa [INTRO]. Observa que
en la ventana de textos Logo escribe la palabra que le habías ordenado. Una
primitiva interesante: REPITE Merece
la pena dedicarle un apartado específico a la primitiva REPITE debido a
su gran utilidad en la creación de gráficos y en el micromundo de
control. Esta primitiva no tiene abreviatura; su sintaxis es: REPITE
n[acciones] ACTIVIDAD
GUIADA Realiza
los siguientes ejercicios y pulsa [INTRO] al final de cada línea: REPITE 4[AV 50 GD 90] BP REPITE 6 [AV 40 GD 60] BP REPITE 7 [AV 30 GD 360 / 7 ] Cambia
el siete por nueve y pulsa [INTRO]. Escribe
el siguiente conjunto de órdenes: BP SL GI 90 AV 200 GD 90 BL REPITE 10[AV 5 GD 90 AV 20 GD 90 AV 5 GI 90 AV 20 GI
90] Observa
que la última orden del corchete GI 90 deja a la tortuga en la orientación
inicial de modo que, al ejecutarse el módulo siguiente, la tortuga esté
situada en la misma dirección. PROPUESTA: Realiza más cenefas como la que aparece en la figura siguiente:
3.
MODO PROCEDIMENTAL El
lenguaje Logo permite trabajar en modo procedimental, característica que
comparte con otros lenguajes de ordenador. Programar en modo procedimental
consiste en enseñar procedimientos al ordenador que, una vez asimilados,
interpreta como si fueran nuevas primitivas. Los
procedimientos pueden escribirse en las ventanas de trabajo y edición,
aunque es preferible hacerlo en la de edición. Para ello, se pulsa el
icono de Edición que aparece en la barra de menú que se superpone a la
ventana de edición. Los procedimientos se escriben en la ventana de edición. Existen
dos PRIMITIVAS asociadas a cualquier procedimiento, PARA y FIN. Todos los
procedimientos comienzan por la primitiva PARA y terminan con la primitiva
FIN. Escribe
el siguiente procedimiento: PARA
CUADRADO REPITE
4 [ AV 60 GD 90] FIN Hay
que tener en cuenta que en la primera línea, sólo puede escribirse la
palabra que se está definiendo separada de PARA por un espacio y en la última
línea sólo puede escribirse la palabra FIN. Siempre debe pulsarse
[INTRO] para validar un procedimiento. El
procedimiento anterior se llama CUADRADO. Para ejecutar posteriormente
este procedimiento, es necesario que el ordenador lo memorice; para ello,
basta pulsar el icono de INTERPRETE. En la ventana de Texto aparecerá, si
el procedimiento es correcto, el siguiente mensaje: ACABAS DE DEFINIR
CUADRADO. Con esta acción, el ordenador ha memorizado el procedimiento,
por lo que puede ser utilizado en el futuro. Cierra la ventana de Edición
situando el cursor en el cuadrado superior izquierdo y pulsa dos veces el
ratón. Activa la ventana de trabajo. Si escribes CUADRADO y pulsas
[INTRO], en la ventana de gráficos se ejecutarán las órdenes asociadas
a ese procedimiento (en este caso aparece cuadrado de 60 unidades de lado). Los
procedimientos recién definidos pueden ejecutarse mientras no se salga de
Logo. Una vez apagado el sistema, Logo sólo recuerda sus primitivas. Cómo
archivar los procedimientos que se encuentran en el Editor Para
no perder los procedimientos diseñados de un día para otro, Logo permite
archivar en el disco los procedimientos que se encuentran visibles en la
pantalla de edición. Para archivar los procedimientos pueden seguirse los
siguientes caminos:
Si
has comprendido los contenidos presentados hasta ahora y has realizado las
prácticas sin dificultad, continúa con el estudio de LOGO.
4.
ALGUNAS PRIMITIVAS MÁS DEL LENGUAJE LOGO
5.
PROGRAMACIÓN MODULAR La
estructura de Logo, basada como ya se ha visto, en los procedimientos
definidos, permite realizar programas de forma modular, es decir,
descomponiéndolos en partes que pueden resolverse por separado y que son
más simples que el programa inicial. Esta modularización puede hacerse a
varios niveles, ya que cada módulo puede descomponerse, también, en
partes más sencillas. Este proceso permite dar respuesta a los
planteamientos de la programación estructurada. Logo es un lenguaje que
estimula la realización de programas claros, en los que cada
procedimiento realiza una misión concreta. Modularidad La
posibilidad que ofrece Logo de dividir un programa complejo en otros más
pequeños y fáciles de diseñar que pueden dividirse en otros, que se
integran en el programa inicial para dar respuesta al problema planteado,
se llama modularidad. Otra
definición de modularidad es la siguiente: modularidad es una característica
de Logo que permite que un programa llame a otros más sencillos y que
estos, también, puedan llamar a otros. Uno
de los problemas que plantea la modularidad en programas geométricos es
la necesidad de tener controlada la posición y orientación de la tortuga
entre módulo y módulo. A continuación, se ofrecen dos formas de
resolver este problema. Modularidad
con referencia al centro Se
propone, como un ejemplo, un programa cuya misión es dibujar un robot.
Para aplicar el concepto de modularidad, se va a dibujar un robot por
partes correspondientes a cada uno de sus miembros (cabeza, cuello,
cuerpo, brazos, patas y pies). PARA
ROBOT BP
BL PONG 2 PONF 3 CABEZA
CEN CUELLO
CEN BRI
CEN CUERPO
CEN BRD
CEN PATAIZ
CEN PIEIZ
CEN PATAD
CEN PIED
CEN FIN La
referencia al centro (CEN) es la característica que más destaca en el
ejemplo anterior por el hecho de que, después de dibujar cada miembro del
robot, la tortuga vuelve al centro de la pantalla para dibujar la
siguiente pieza. Este movimiento que se repite al final de cada módulo se
realiza por medio del programa CEN. PARA
CEN SL
PONRUMBO 0 CENTRO FIN Por
otro lado, los módulos encargados de dibujar los miembros trazan rectángulos,
por lo que se ha creado un módulo variable, REC que se adapta al tamaño
de rectángulo que interese en cada momento, de forma que cada dibujo
comienza y termina en el ángulo inferior izquierdo. PARA
REC :L :A BL REPITE 2 [ AV :L GD 90 AV :A GD 90] FIN Los
módulos que dibujan los miembros, CABEZA, CUELLO y el resto, comienzan su
ejecución subiendo el lápiz y colocando la tortuga en la posición
correspondiente al vértice inferior izquierdo del rectángulo que se
dibuje en cada caso. El uso de papel cuadriculado supone una gran ayuda en
esta labor. Modularidad
con referencia al módulo anterior El
problema que se plantea es el de conocer en todo momento la posición de
la tortuga cuando termina un módulo, ya que es necesario situar la
tortuga en un punto determinado para comenzar el módulo siguiente. Como
ejemplo de diseño, se toma un tren dividido en cada una de las unidades
que integran el convoy. Consulta el manual de LOGO para conocer las
primitivas PONG, PONF y PONCL. PARA
TREN BP
PONG 1 PONF 1 PONCL 4 OT SL AV 10 GI 90 AV 150 GD 90 MAQUINA VACARBON VAGON1 VAGON2 VAGONCOLA VIA MT FIN Al final de cada módulo, la tortuga dibuja el parachoques y después realiza un giro de noventa grados hacia la izquierda para disponerse a dibujar el siguiente rectángulo. 6.
USO DE VARIABLES Las
variables pueden ser comparadas con cajas a las que se les pone una
etiqueta (nombre) y en cuyo interior existe un contenido. Una
variable, por ejemplo, puede llamarse HOLA y contener el número 34; otra
puede llamarse BARCO y contener la palabra chocolate. De este modo, al
ejecutar la orden de escribir el contenido de HOLA, el ordenador escribe
34, de la misma manera que si se le mandase escribir el contenido de BARCO
escribiría chocolate. Las
variables en el modo directo Sitúate
en la ventana de trabajo. Escribe: Mediante
la instrucción anterior se ha creado la variable BARCO y se le ha
asignado como contenido la palabra chocolate. Escribe: En
la ventana de textos, aparece escrito el contenido de la variable BARCO,
en este caso chocolate. Conviene destacar que para conocer el contenido de
una variable, es necesario escribir la instrucción ESCRIBE : "nombrevar,
donde nombrevar es el nombre de la variable: Prueba
el siguiente ejemplo: HAZ
"h 66 ESCRIBE
:h + 9 En
este caso en la ventana de textos aparecerá el número 75, que es el
resultado de sumar 66, contenido de la variable h, al número 9. Las
variables locales en los procedimientos Retrocedamos
al procedimiento CUADRADO PARA
CUADRADO BP
BL PONCL 5 PONG 4 PONF 16 REPITE 4 [AV 50 GD 90 ] FIN Como
se ha visto, este procedimiento permite realizar un cuadrado concreto y único
de 50 unidades de lado, de modo que si se quisiera realizar otro cuadrado
más grande o de otro color, debería diseñarse un procedimiento
distinto. Las variables locales permiten solucionar este problema. Observa
el procedimiento que a continuación se analiza: PARA
CUAVARILADO :L BP BL PONCL 5 PONG 4 PONF 16 REPITE 4 [AV :L GD 90 ] FIN
RECUERDA El
nombre del procedimiento que se coloca en la primera línea después de
PARA conlleva la creación de la variable :L. Dentro
del corchete, el argumento de la primitiva AVANZA no es una cantidad fija,
sino que varía en función del contenido de la variable :L por lo que,
dependiendo de dicho contenido, el programa dibuja el cuadrado
correspondiente. Copia
el procedimiento CUAVARILADO :L y no olvides pulsar [INTRO] después de
FIN; escribe y ejecuta: CUAVARILADO
50 CUAVARILADO
30+5 CUAVARILADO
1 CUAVARILADO Observa
que Logo envía un mensaje para que completes los datos. Las
variables locales se llaman así porque su existencia está limitada al
tiempo de ejecución del programa. Para comprobar este hecho, escribe la
frase: ESCRIBE
:N Observa
el mensaje que envía Logo: "Esa variable ya no existe." Crea
diversos procedimientos que permitan dibujar cuadrados de lado fijo y
color, grosor, o fondo variables. Llámalos: CUAVARICOL
:C CUAVARIGRO
:G CUAVARIFON
:F Ejecuta
dichos procedimientos utilizando distintos parámetros. Logo
puede gestionar en cada procedimiento tantas variables como se definan en
la primera línea. Fíjate en el siguiente ejemplo: PARA
CUAVARIA :C :G :F BP BL PONCL :C PONG :G PONF :F REPITE 4 [ AV 50 GD 90 ] FIN Una
vez definido el procedimiento en el Editor y después de haberlo validado,
vuelve al área de trabajo y ejecuta: CUAVARIA
5 4 16 CUAVARIA
1 1 1 CUAVARIA
2 4 Observa
que en el último caso Logo envía un mensaje para que se completen los
datos. Modifica
el procedimiento anterior en el Editor para que incluya como cuarta
variable la longitud del lado. (no olvides salir del Editor validando los
cambios con el icono intérprete).
7.
VIAJE TOTAL Es
importante notar que el ángulo de giro que recorre la tortuga es el ángulo
exterior y no el interior de los polígonos como, en un principio, podría
suponerse; de modo que el giro total que realiza la tortuga después de
dibujar un polígono es de 360o. Conviene ayudar al alumnado a que
descubra que la diferencia entre un polígono y otro no estriba sólo en
su número de lados, sino en la amplitud de sus ángulos. Se
va a definir un procedimiento que permite realizar un polígono con un número
variable de lados: PARA
POLIN :N BP BL PONCL 1 PONG 2 PONF 3 REPITE :N [AV 50 GD 360 / :N ] FIN Ejecuta
el programa desde el área de trabajo con los siguientes parámetros: POLIN 6 POLIN 3 POLIN 2 POLIN
50 Crea
procedimientos en los que varíen otros parámetros como la longitud de
los lados. Realiza
las modificaciones necesarias en el Editor para que este programa dibuje
los polígonos apoyados siempre con el lado inferior en posición
horizontal. Diseña
un programa que realice circunferencias de tamaño variable. Las
variables globales en los procedimientos Las
variables globales, a diferencia de las locales, pueden existir durante
todo el tiempo en que Logo está activo; puede decirse que
"permanecen suspendidas en el área de trabajo", lo cual permite
usarlas en cualquier procedimiento que se cree. Esta característica
implica una ocupación de la memoria y la vigilancia del programador para
que no haya dos variables definidas con el mismo nombre. Las
variables globales se crean con la primitiva HAZ usada con la siguiente
sintaxis: HAZ
"NOMBRE contenido El
nombre que se da a la variable debe ser un conjunto de caracteres sin
espacios en blanco y debe ir precedido por comillas. El contenido de la
variable puede ser:
El
contenido de una variable aparece cuando se escribe precedida por el símbolo
:nombre. No
es posible crear una variable global ni en la primera línea de un
procedimiento, ni en la última. Sirva como ejemplo el siguiente
procedimiento: PARA
CUAGLO BP
BT ES
[ Escribe la longitud del lado de un cuadrado] HAZ
"LADO LEEPALABRA REPITE
4 [ AV :LADO GD 90] FIN PARA
SALUDO ES
[¿Cómo te llamas?] HAZ
"NOMBRE LEEPALABRA ES
FRASE [Encantado de conocerte] :NOMBRE FIN PARA
CUBO BP
BT ES
[Este programa calcula el cubo de las cifras arábigas] ES
[¿De qué cifra deseas el cubo?] HAZ
"CIFRA LEECAR HAZ
"CUBO :CIFRA * :CIFRA * :CIFRA ES
(FRASE [El cubo de ] :CIFRA [ es ] :CUBO) FIN
Diferencias
entre carácter, palabra y lista:
Comprueba
el comportamiento de estos procedimientos (las frases situadas después de
";" son comentarios, no líneas de programación): PARA
lectura_caracteres1 ES
[¿Quién descubrió América?:] HAZ
"H LC ; se asigna a la variable H el 1er carácter escrito por
teclado ES
:H FIN Obsérvese
que, cuando el nombre de un procedimiento contiene más de una palabra, se
usan guiones para unirlos. En el procedimiento anterior no es necesario
pulsar [INTRO] para la aceptación del dato. PARA
lectura_caracteres2 ES
[¿Quién descubrió América?:] HAZ
"H LCS 3 ; se asigna a la variable H los tres primeros caracteres
escritos por teclado ES
:H FIN Tampoco
es necesario pulsar [INTRO] para indicar al procedimiento que se ha
acabado de introducir los datos, puesto que está esperando tres
caracteres y, una vez recibidos, continúa el flujo del programa. Si
quieres introducir un número menor de caracteres que los indicados, pulsa
[INTRO] cuando decidas no introducir más. PARA
lectura_caracteres3 ES
[¿Quién descubrió América?:] HAZ
"H LP ; asignamos a la variable H la primer palabra escrita por
teclado ES
:H FIN PARA
lectura_caracteres4 ES
[¿Quién descubrió América?:] HAZ
"H LL ; asignamos a la variable H todo el texto escrito por teclado ES
:H FIN 8.
RECURSIVIDAD Se
llama recursividad a la posibilidad que ofrece un programa diseñado en
Logo de llamarse a sí mismo en un bucle sin fin. Un sencillo ejemplo lo
constituye el siguiente programa, que dibuja una circunferencia de modo
recursivo: PARA
CIREC AV
1 GD
1 CIREC FIN Un
primer problema por resolver en un procedimiento recursivo, es encontrar
la forma de abandonar su ejecución infinita de procedimiento sin pulsar
la tecla [ESC]. Se puede abandonar dicha ejecución mediante la primitiva
TECLA? en una condición. Sentencias
condicionales Logo
puede "valorar" el contenido de una condición y
"decidir" entre dos opciones. Para dejar claros estos conceptos
se utilizará la primitiva TECLA?, que devuelve CIERTO o FALSO según se
haya pulsado o no una tecla. El
programa CIREC queda controlado al anteponer el condicional SI a la
primitiva TECLA? PARA
ARCO SI
TECLA? [ALTO] AV
1 GD
1 ARCO FIN Este
programa va dibujando un arco con avances y giros hasta que se pulse una
tecla. Es
importante insistir sobre la estructura de las sentencias condicionales,
ya que son la base del "pensamiento" de los programas en Logo. La
sentencia condicional se expresa con la primitiva SI y tiene varias
sintaxis; las dos más usadas son: SI
condición [acción 1] [acción 2] Esta
sentencia significa que, si se cumple la condición, se ejecutan las
acciones contenidas en el primer corchete y, en caso contrario, las
incluidas en el segundo. En ambos casos, una vez realizadas todas las
acciones incluidas en uno de los corchetes, el programa ejecuta la línea
siguiente del programa:
SI
condición [acción] En
este caso, si se cumple la condición, se ejecutan las acciones contenidas
en el corchete; después el programa pasa a la línea siguiente; si no se
cumple la condición, el programa pasa a la línea siguiente. Importancia
de la recursividad en LOGO Las
estructuras recursivas se utilizan muy a menudo en los programas de robótica.
En gran cantidad de ocasiones las máquinas, además de ejecutar acciones
habituales, están alertas ante cualquier cambio que pueda producirse
gracias a su programación. Dentro de su programa de funcionamiento, se
incluyen programas recursivos que se activan debido a los cambios en las
condiciones de la máquina. Conviene
tener en cuenta que la recursividad es más que un bucle, una llamada al
propio programa para que vuelva a realizar las mismas acciones en un ciclo
sin fin. Tal vez, la etiqueta de un conocido anís español pueda
ejemplificar mejor el fenómeno recursivo. En ella, un mono con un cierto
toque "darwiniano", sostiene una botella del mismo anís, la
cual contiene a su vez otra etiqueta más pequeña que contiene la
representación de un mono que sostiene una botella. Conviene aclarar, por
tanto, que cada vez que Logo se llama a sí mismo, genera un nuevo
programa que debe ejecutarse en su totalidad. Esta última afirmación,
que puede parecer una evidencia incuestionable, sirve como eficaz sistema
de control de los programas recursivos y debe tenerse siempre presente
para no recargar los programas con la "basura de las colas" que
se van generando. Control
de la recursividad por medio de un contador Ejemplo: PARA
CONTADOR :N SI
:N<0 [ESCRIBE "GOL ALTO] ES
:N CONTADOR
:N-1 FIN El
programa contiene una variable local :N que sólo sirve para escribir su
contenido cada vez que el programa se ejecuta. El programa se llama a sí
mismo y hace disminuir el valor de la variable en cada paso. La sentencia
condicional de la primera línea controla la ruptura del bucle en el
momento en que se llega a un valor negativo, se escribe la palabra GOL y
se detiene el programa. Obsérvese que la comparación numérica entre el
contenido de la variable y la constante no se ha hecho con el signo = sino
con el signo < ya que, si el incremento se hiciera con decimales
(CONTADOR :N-0, 3), nunca se cumpliría la condición y el bucle sería
indefinido.
Las
colas en la recursividad En
un párrafo anterior, se afirma que cada vez que un programa se llama a sí
mismo genera un nuevo programa que debe terminarse. Es importante no
cerrar el tema de la recursividad sin presentar los "extraños
efectos" que la recursividad produce en un programa. La capacidad de
Logo para evitar dichos efectos pone de manifiesto cuando se evitan, a
través de una correcta programación. Observa
este programa: PARA
CAPICUA :N SI
:N<1 [ALTO] ES
FRASE [CABEZA] :N CAPICUA
:N-1 ES
FRASE [COLA] :N FIN Antes
de ejecutar CAPICUA 9, te proponemos la apuesta de intentar averiguar lo
que escribirá Logo cuando se ejecute CAPICUA 9. Una vez hayas formulado
tu apuesta, observa que CAPICUA 9, después de pasar por la primera línea
de control escribe CABEZA 9 e inmediatamente después se convierte en
CAPICUA 8 sin haber terminado el programa, dejando pendiente para otro
momento la ejecución de la frase COLA 9. El programa CAPICUA 8 hará lo
mismo dejando su última orden COLA 8 para otro momento, y así
sucesivamente hasta que :n llegue a valer 0, momento en que, en lugar de
terminar, ejecutará todas las colas empezando por la del último programa
ejecutado, CAPICUA 1 hasta llegar al primero. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|