Pues eso… que en estos días me ha dado por retomar un viejo amigo (lenguaje de programación) que usé por primera vez en los años 80 (sobre el 84 u 85) en mi Commodore-64, me refiero al lenguaje FORTH.
Ya no lo recuerdo, pero creo que era un «cartucho» que se insertaba en el C-64, el FORTH 64, de eso estoy seguro, porque he encontrado esta página con el manual y esa imagen (ver la captura de aquí abajo) sí que la recuerdo.

La cuestión es que, en aquellos años, el BASIC del Commodore, primero del VIC-20, después del C-64, era… ¿cómo decirlo? muy GO-TerO, es decir, que no tenía DO/LOOP, WHILE, UNTIL y lo que se hacía era el clásico GOTO.
Y este lenguaje, FORTH, lo recuerdo como el primero en el que no usé un GOTO, entre otras cosas porque no existe la palabra GOTO en Forth. 😉
La verdad es que no tengo nada de aquello, porque llegué hasta comprar un libro de Forth, pero para el BBC Micro, y de algo me sirvió. No recuerdo detalles, pero recuerdo que era «emocionante» programar en ese lenguaje, sobre todo en aquellos tiempos que lo más que teníamos a nuestra disposición eran los GOSUB, y eso de que pudieras crear tus propias palabras (WORD es el término de Forth para las «subrutinas»), pues… ¡era una pasada!
Hablando de DO, LOOP, WHILE y UNTIL y el Commodore 64, también por aquellos años ochenta me fabriqué en «código máquina» (CM para el C-64) unas extensiones para BASIC, entre ellas el DO-LOOP UNTIL y DO-LOOP WHILE. Con el C-64 y el C-128 (pero menos) hice cosillas «curiosas» en ensamblador para el Commodore 64, en fin… chocheando que está ya uno… jajaja… en fin-bis.
Volviendo al Forth, decirte que lo mismo publico algunas cosillas de las que estoy haciendo, en este caso ya son para ANS-FORTH, el estándar, que estoy haciendo con Gforth de GNU (abajo tienes el enlace) para no olvidarme… aunque ahora ha cambiado un poco, sigue siendo un «peñazo» el tema de los números y las cadenas…
Lo más curioso de este lenguaje es que usa la notación polaca inversa, y que todo lo maneja poniendo y sacando cosas de la pila (stack), que es de tipo LIFO (last-in first-out, el último en entrar es el primero en salir), de forma que si quieres sumar dos números lo harás de esta forma:
7 3 +
y para mostrarlo escribes un punto para ver el resultado.
Y si quieres hacer algo como: (3 + 2 ) * 8, tendrás que hacerlo, por ejemplo, de esta otra:
8 2 3 + *
.
Y te mostrará 40, 5 * 8.
Los pasos que sigue son:
1- Pone el 8 en la pila
2- Pone el 2 en la pila
3- Pone el 3 en la pila
4- Pone el + en la pila y
5- Suma dos valores que haya en la pila y pone el resultado (5)
6- Pone el * en la pila
7- Multiplica dos valores de la pila y pone el resultado (40)
8- El punto muestra el valor que haya en la pila.
En FORTH no se usan los paréntesis ni hay nivel de precedencia, todo se maneja con el orden en que esté en la pila.
El ejemplo anterior se puede escribir también así:
2 3 + 8 *
Imagina cómo lo hace en este caso.
Solo comentarte que cuando pulsas intro es cuando empieza la acción, es decir, no hace nada mientras estás escribiendo las cosas para que se pongan en la pila.
Como te comento abajo, los de GNU han hecho una versión de Gforth para Android (ver la captura con el clásico HOLA-MUNDO).

Y poco más puedo decirte, salvo ponerte el código del HOLA-MUNDO que he hecho para el Android 😉
: HOLA-MUNDO ( -- muestra el mensaje ) ." Hola Mundo de GFORTH!" ;
Ahí abajo te dejo unos cuantos enlaces sobre FORTH por si quieres echarle un vistazo.
Y esto es todo… ah, y ¡Felices Fiestas! aunque sea en el día de los Reyes Magos 😉
Nos vemos.
Guillermo
P.S.
Enlaces sobre FORTH:
Wiki de Forth para Commodore.
GForth de GNU (el que estoy usando ahora), también existe una versión para Android.
FORTH, Inc., entre otros del «inventor» de Forth.
Starting Forth, un libro online de Leo Brodie.
FORTH Standard, pues eso…
And so Forth, también te puede servir.
Hay muchos más en internet, me he quedado sorprendido de que haya tanto movimiento sobre FORTH.