El lenguaje Logo se presenta en distintos formatos, que depende del fabricante del entorno; los más utilizados son MSWLOGO, ACTILOGO y WIN-LOGO fundamentalmente; el WIN-LOGO puede usarse en entorno del DOS y también en el de WINDOWS. Este ensayo trata 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 PENTIUM o superior, 8 Mb de memoria y 2 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

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 la ventana correspondiente al área de Trabajo (zona en la que el usuario escribe sus mensajes).

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:

    Pulsando [Ctrl]+[F4].

    Haciendo doble "clic" en el recuadro superior izquierdo (botón de control) de la ventana activa.

    Haciendo un "clic" en el botón de control de la ventana y eligiendo la opción Cerrar.

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: Lo primero que debe hacerse es activar el área de TRABAJO; para ello se sitúa el puntero del ratón sobre algún punto de la ventana de TRABAJO y después se hace"clic" en ella con el ratón. Instantáneamente el título de esa ventana aparecerá resaltado, lo cual indica que esa zona es activa.

Si se escribe: AVANZA 40 y se pulsa [INTRO]

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:

AVANZA x (AV x)

 la tortuga se desplaza x unidades hacia adelante

RETROCEDE x (RE x)  

 la tortuga se desplaza x unidades hacia atrás

GIRADERECHA x (GD x)

la tortuga gira a la derecha x grados

GIRAIZQUIERDA x (GI x)

  la tortuga gira a la izquierda x grados

ESCRIBE "X (ES "X)  

escribe en la ventana de textos la palabra situada detrás de las comillas

ESCRIBE [XX XX] (ES [XX XX]) 

 escribe en la ventana de textos la frase situada entre los corchetes

BORRAPANTALLA (BP) 

se borra la pantalla de gráficos

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]: GD 45

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: HESCRIBE "ERROR

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.

3. MODO PROCEDIMENTAL

El lenguaje Logo permite trabajar en modo procedimental, característica que comparte con otros lenguajes de programación. Programar en modo procedimental consiste en enseñar procedimientos al ordenador que, una vez asimilados, interpreta como si fueran nuevas primitivas.

Los procedimientos (programas) 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 (programas) 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 programa:

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:

    Desde la ventana de Trabajo: Mediante la primitiva GUARDAED se almacenan todos los procedimientos en un determinado archivo. Por ejemplo, con GUARDAED "arch.log, se almacenan los procedimientos en el archivo arch. log.

  1. Desde la barra de menú teniendo activa la ventana de EDICIÓN: Se elige la opción GRABAR dentro del menú ARCHIVO.

    Cuando aparece la ventana de diálogo adjunta, se escribirá el nombre con el que se quiera guardar el conjunto de procedimientos. En este caso se elige el nombre ARCH.

    Conviene señalar que los archivos de procedimientos, tienen por defecto la extensión LOG.

  2. Teniendo activa la ventana de EDICIÓN, es posible elegir el icono GRABAR (salvar en disco) y seguir los pasos del punto anterior.

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

SUBELAPIZ (SL)

Eleva el lápiz de la tortuga activa para que no deje trazo al moverse.

BAJALAPIZ (BL)

Activa el lápiz de la tortuga y dibuja un trazo a lo largo de su trayectoria.

GUARDAED "archi

 Guarda el contenido del área de edición en un archivo llamado archi.

REPITE

 Repite el número de veces indicado la acción situada entre corchetes.

CENTRO

Sitúa las tortugas activas en el centro del gráfico. En su desplazamiento al centro, las tortugas dejan rastro o no, dependiendo de si su posición es bajalapiz o subelapiz.

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: HAZ "BARCO "chocolate  Pulsa [INTRO].

Mediante la instrucción anterior se ha creado la variable BARCO y se le ha asignado como contenido la palabra chocolate.

Escribe: ESCRIBE : "BARCO   Pulsa [INTRO].

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 360º. Es importante resaltar 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:

 

Un número

 

El resultado de una operación

 

Una palabra que irá precedida de comillas

 

Una lista entre corchetes

 

Una serie de datos introducidos desde teclado durante la ejecución del programa por medio de ciertas primitivas.

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

HAZ "nombr obj

Asigna el valor indicado en obj a la variable llamada nombr

LEECAR (LC)

Lee el primer carácter de un archivo o la primera pulsación desde el teclado sin necesidad de pulsar [INTRO].

LEECARS num (LCS num)

 Lee los num primeros caracteres pulsados desde el teclado o leídos de un archivo

LEELISTA (LL)

Lee una lista de caracteres introducidos desde el teclado o leídos desde un archivo

LEEPALABRA (LP)

Lee la primera palabra introducida desde el teclado o leída desde un fichero

Diferencias entre carácter, palabra y lista:

 

Carácter es una sola letra, número o pulsación de teclado. (Ej. : a)

 

Palabra es un conjunto de caracteres que no tienen espacios entre sí. (Ej. : 123a)

 

 Lista es un conjunto de palabras separadas por espacios (Ej. : La casa número 18)

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.

 

Construye otro contador que aumente el valor de la variable :N

 

 Construye otro contador con dos variables, el número de inicio y el descenso.

 

 Construye un programa recursivo que dibuje espirales utilizando un avance y un giro, e incrementando uno otro o ambos.

 

  Modifica el programa anterior con otras variables para cada incremento

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.

                        © GRUPO LOGO y Javier de Lucas