Cinco minutos con el lenguaje Logo

Logo es un lenguaje, hoy en día anticuado, que durante un tiempo se consideró muy adecuado para introducir en la programación a niños de corta edad.

Uno de los factores a su favor era la facilidad para crear "gráficos de tortuga": un robot con forma de tortuga y con un lápiz acoplado iba dibujando sobre un papel, respondiendo a las órdenes del usuario. En versiones posteriores, para ordenadores de escritorio, esta "tortuga" se convirtió en una "flecha" que se desplazaba por la pantalla.

Por ejemplo, ésta es la apariencia del intérprete de Logo creado en Javascript por Joshua Bell:

Logo 01 - entorno

La versión más reciente (a fecha marzo de 2019) de este intérprete muestra una tortuga en vez de una flecha y en su parte derecha no sólo contiene una referencia del lenguaje Logo, sino también una serie de ejemplos, el histórico de órdenes que hemos tecleado, enlaces a otros sitios web relacionados, etc:

Logo 01 - entorno (2019)

En la parte inferior de la pantalla se escriben las órdenes. Por ejemplo, para decir que avance 90 unidades en pantalla (en principio, 90 "píxeles", o puntos de la pantalla), usaríamos "forward 90":

Logo 01 - forward 90

Y para decir que gire 45 grados hacia la derecha (en el sentido de las agujas del reloj) utilizaríamos "right 45":

Logo 01 - right 45

Con cuatro pares de secuencias como esas, podríamos dibujar un cuadrado que tuviera 120 unidades de lado:

Logo 01 - cuadrado

(De forma similar, con la orden "left" nuestra tortuga giraría a la izquierda, y con "clean" borraríamos la pantalla; "clearscreen" no sólo borra la pantalla, sino que también recoloca la tortuga en su posición inicial).

En la mayoría de versiones de Logo, las órdenes se pueden abreviar. Por ejemplo, "forward" se puede reducir a "fd" y "right" se abrevia "rt", así que lo anterior se podría conseguir escribiendo menos (a cambio de resultar menos legible) haciendo:

Pero en general lo más recomendable no es "teclear menos", sino indicar que las tareas repetitivas son simplemente una misma tarea que se repite. Para eso podemos usar la orden "repeat" e indicar cuantas veces debemos repetir (por ejemplo 4), seguido del bloque a repetir, entre corchetes, así:

En muchas ocasiones será preferible, por legibilidad, indicar bloques como esos en varias líneas, en vez de en una sola, para que sea más evidente dónde empieza y acaba un bloque repetitivo:

También podemos "dar un nombre" a una serie de pasos, creando así un "procedimiento". Por ejemplo, podemos crear un procedimiento llamado "estrella" que dibuje una estrella de 5 puntos, girando 144 grados tras cada segmento:

O bien, en varias líneas:

Como en el ejemplo anterior, el "procedimiento" se declara precediéndolo con la palabra "to" (para), y termina con "end". Para ponerlo en marcha, basta indicar su nombre:

Logo 01 - estrella

Si no queremos que esa estrella se dibuje siempre con 120 unidades de lado, podemos usar una "variable", de modo que su valor pueda cambiar entre una llamada del procedimiento y la siguiente. Por ejemplo, podemos crear un triángulo cuyo lado no esté prefijado haciendo:

(Para indicar que algo no es una orden, sino una variable, se debe preceder su nombre por un símbolo de "dos puntos", como en ":lado"). Ahora, para dibujar un triángulo de lado 80 haríamos:

Logo 01 - triángulo

Pero podemos "rizar el rizo" un poco más: si tras dibujar cada segmento, giramos y dibujamos un segmento algo más grande, obtendremos una espiral:

(Se puede cambiar el valor de una variable usando "make", y precediendo su nombre por un único símbolo de comillas dobles. Un ejemplo más sencillo sería make "x 20 y el valor de una variable se podría cambiar con órdenes como make "x :x*2)

Si ahora pedimos una espiral de lado 20 (con "espiral 20"), aparecerá:

Logo 01 - espiral

Si no te basta con imágenes estáticas, este video recoge todo el proceso "casi en tiempo real", con una versión un poco más moderna del intérprete de Logo creado por Joshua Bell (la de marzo de 2019):

(Por Nacho Cabanes, creado en 2012, actualizado en 2019)