martes, mayo 27, 2014

Los 'ene' nombres, incluye concurso

En esta entrada, con menos interés potencial que cualquier otra en este pretencioso blog, trataré de combinar una reflexión sobre un pedazo de código de BASIC, una corrección a un gran autor, y un comentario sobre el misticismo light (el primero y el segundo).

Por alguna razón (trabajo procrastinado, tal vez) me desperté pensando en código, combinaciones y recursión, y mientras rumiaba granola y matoneaba neolaureanistas en las redes sociales, recordé 'El péndulo de Foucault' de Umberto Eco, y me apresuré a buscar el fragmento de código que aparece en el libro, el que es usado para generar todas las combinaciones del nombre de dios.

Aparte de encontrar un hermoso marcador de páginas de la Bauhaus que creía perdido hace años, rápidamente encontré el capítulo en el que Jacopo Belbo programa a Abulafia (el computador-personaje del libro), según las instrucciones de Abulafia (el cabalista sefardí del s. XIII), para hacer las permutaciones con las que se habría de encontrar HaShem (el nombre) con el que se pueden activar Golems y encontrar puesto en TransMilenio. El código que encontré se veía muy cabalístico, gracias a la tipografía monoespaciada con pinta de impresora de punto, y a los abstrusos comandos PRINT, FOR, IF, THEN, NEXT, END y otras combinaciones de letras sin sentido alguno para los no iniciados.

Una lectura rápida del código me reveló un error (¿deliberado?), que no permitiría que funcionara, que era una instrucción fuera de línea. Después, un intento de ejecución del código en una máquina virtual nostálgica reveló otro pequeño problema que pude corregir fácilmente. El código funcional para que se puedan ejecutar las instrucciones de Abulafia en Abulafia es:

10 REM anagrams
20 INPUT L$(1),L$(2),L$(3),L$(4)
30 PRINT
40 FOR I1=1 TO 4
50 FOR I2=1 TO 4
60 IF I2=I1 THEN 130
70 FOR I3=1 TO 4
80 IF I3=I1 THEN 120
90 IF I3=I2 THEN 120
100 LET I4=10-(I1+I2+I3)
110 PRINT L$(I1);L$(I2);L$(I3);L$(I4)
120 NEXT I3
130 NEXT I2
140 NEXT I1
150 END

Después de correr el programa exitosamente y leer los 24 posibles nombres sin que nada pasara, decidí hacer el ejercicio mental de explicarme el código en español, como para aclararle el universo cuál era mi intención:

10 REM anagrams

En realidad nada, sólo le recuerda al usuario qué hace el programa.

20 INPUT L$(1),L$(2),L$(3),L$(4)

Solicita al usuario las letras a combinar (L), y las asigna un valor de 1 a 4.

30 PRINT

Hace en la pantalla una línea vacía, para recordarnos de la falta de propósito del universo.

40 FOR I1=1 TO 4

Hace un proceso de iteración en el que en cada vez se usa un valor diferente a la variable I1, del 1 al 4.

50 FOR I2=1 TO 4
60 IF I2=I1 THEN 130

Hace otro proceso de iteración igual para la variable I2, pero pone una condición: Si el valor de I1 es igual al de I2, debe ir a otra orden, la que está en la línea 130, que le dice que use el siguiente número, con el objeto de no repetir números.

70 FOR I3=1 TO 4
80 IF I3=I1 THEN 120
90 IF I3=I2 THEN 120

Hace un proceso de iteración para I3, con la misma condición de antes, pero incluyendo los valores de I1 e I2, enviando a la instrucción en la línea 120.

100 LET I4=10-(I1+I2+I3)

Asigna el valor de I4 (LET quiere decir "sea", es el más místico de todos los comandos), que debe ser uno que no esté en las variables I1, I2 e I3. Para saber esto, se resta  mediante la resta de los valores de I1, I2, I3 a la sumatoria de los valores de todas las variables, en este caso, 1+2+3+4 = 10, revelando el valor del que falta. ¿No es magia esto?

110 PRINT L$(I1);L$(I2);L$(I3);L$(I4)

Aquí vemos el resultado de todo, se imprimen los valores de cada variable, en cada iteración, revelando una combinación a la vez.

120 NEXT I3
130 NEXT I2
140 NEXT I1

Cada NEXT es una palanca que mueve cada variable a su siguiente valor.

150 END

Acaba el programa y muestra la futilidad del ejercicio y de la existencia, en general.

Toda esta explicación, incluida la recitación, fue inútil, pues no activé ningún Golem, ni me interesa subirme a un bus, pero fue un ejercicio pedagógico interesante.

¡Concurso fácil!

Si leyó el libro o el capítulo por pura curiosidad, pudo ver que J. Belbo gastó una cantidad no especificada de whisky y sándwiches generando el código para combinar seis caracteres. Como homenaje a este ñoñazo de la semiótica y a sus personajes ofrezco a mis pocos, poquísimos y desocupados, desocupadísimos lectores un premio de whisky (o tinto, o bebida análoga de su elección) y sándwich (o pasabocas sólido o coloidal análogo) y un ratico de charla intrascendente a la persona que primero ponga el código correcto para combinar 6 caracteres en BASIC en la sección de comentarios de esta publicación, usando lo que hay en esta publicación como plantilla o inspiración.
El premio puede entregarse en Bogotá, o donde nos encontremos, la próxma vez que nos veamos.
Nota: El código debe poder correr en el emulador de AppleSoft Basic, el del Apple //, cuyo link está en el texto.

Adenda musical

Hace un tiempo, junto con el Ensamble de Exploración Vocal de los Andes (EEVA) cantamos una obra llamada 'HaShem' (El Nombre) de un compositor colombiano muy chévere que se llama Johann Hassler. En la obra, las vocales y consonantes se combinaban de acuerdo a las reglas que dio Abraham Abulafia para sus ejercicios místicos. Cantar esta obra y hacer estos ejercicios es muy interesante, cuando menos, divertido. Aunque no tuve ninguna epifanía, disfruté de los efectos sicotrópicos de la saturación de CO2 en mi cerebro.

Si tienen la oportunidad, vayan a escuchar esta obra en vivo, o si pueden, sean intérpretes de esta. Johann no solo es buen tipo, sino muy buen compositor.

No hay comentarios.: