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:
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:
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":
Y para decir que gire 45 grados hacia la derecha (en el sentido de las agujas del reloj) utilizaríamos "right 45":
Con cuatro pares de secuencias como esas, podríamos dibujar un cuadrado que tuviera 120 unidades de lado:
forward 120 right 90 forward 120 right 90 forward 120 right 90 forward 120 right 90
(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:
fd 120 rt 90 fd 120 rt 90 fd 120 rt 90 fd 120 rt 90
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í:
repeat 4 [ forward 120 right 90 ]
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:
repeat 4 [ forward 120 right 90 ]
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:
to estrella repeat 5 [ forward 120 right 144 ] end
O bien, en varias líneas:
to estrella repeat 5 [ forward 120 right 144 ] end
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:
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:
to triangulo :lado repeat 3 [ forward :lado right 120 ] end
(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:
triangulo 80
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:
to espiral :lado repeat 15 [ forward :lado right 90 make "lado :lado+10 ] end
(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á:
espiral 20
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)