APL y J

El profesor canadiense Ken Iverson, cuando trabajaba en la Universidad de Harvard, inventó una notación personal para describir procedimientos matemáticos (inicialmente, por tanto, no pretendía ser un lenguaje de programación). Esta notación, concisa y sin ambigüedad, fue descrita por el propio Iverson en 1962 (ya trabajando para IBM) en el libro A Programming Language (de ahí las iniciales APL) y durante la década de los 60 IBM desarrolló el primer intérprete.

APL es sobre todo conocido por su concisión. Por ejemplo, la sentencia 10 ? 10 devuelve los números del 1 al 10 ordenados aleatoriamente. El siguiente programa de una sola línea (y diecisiete caracteres), copiado de la Wikipedia en inglés, (mira allí si no se ven bien los símbolos en tu navegador o quieres saber cómo funciona) genera la lista de todos los números primos entre 1 y R. Por ejemplo, si a R se le ha asignado previamente el valor 10, devuelve la lista 2, 3, 5, 7.


(∼R∈Ro.×R)/R←1↓ιR

Otro de los puntos fuertes de APL es su capacidad para manejar conjuntos de datos como un todo, evitando en muchos casos la necesidad de bucles. Normalmente se trata de un lenguaje interpretado que proporciona un entorno interactivo y flexible.

APL ha sido criticado, en cambio, por su falta de legibilidad, lo que hace difícil modificar programas antiguos (se le ha llamado, irónicamente, write-only language). Una dificultad importante deriva del uso de signos propios (letras griegas y otros caracteres aún menos convencionales), lo que, además de dificultar la escritura (al no aparecer en los teclados normales), hace que el código sea poco portable, ya que cada versión concreta de APL almacena a su modo el código fuente (y eso aparte de las habituales diferencias de una implementación a otra). El propio Iverson, junto con Roger Hui, creó un nuevo lenguaje (J), derivado de APL, que usa sólo caracteres ASCII.

Un sitio web dedicado a APL es APL Wiki. Y se puede probar APL en línea en estos cuatro sitios.

A+ es una variante de APL orientada a las finanzas, desarrollada por Arthur Whitney en la empresa Morgan Stanley. Se distribuye con licencia GPL, aunque su desarrollo parece estar parado desde 2008, posiblemente porque Arthur Whitney está más interesado en desarrollos posteriores, como K, Q y Shakti (todos ellos propietarios). A+ se puede ejecutar en MacOS X, Linux y otras versiones de Unix. En Ubuntu (18.04) se puede instalar con la orden "sudo apt install aplus-dev".

APL\11, es un intérprete gratuito para Unix (no tengo claro si libre), escrito (hace mucho tiempo) por Michael Cain a partir de una versión anterior hecha (hace muchísimo tiempo) nada menos que por Ken Thompson. Sustituye los símbolos APL por caracteres ASCII, incluidas algunas letras mayúsculas. Solo está disponible el código fuente (todo un reto compilarlo actualmente) y ejecutables para Sinclair QL (!).

APL2 es una versión comercial de IBM y una redefinición del lenguaje desarrollada desde 1971. En el sitio de IBM se encuentra aún una antigua versión de prueba para MS-DOS, TryAPL2.

APLSE (APL Special Edition) es una versión gratuita de APL*Plus PC (el asterisco debería ser en realidad una estrella). APL*Plus es una importante versión histórica de APL y APL*Plus PC su versión para PC (es decir, para MS-DOS) de la cual existía una versión de demostración bien documentada aunque con grandes limitaciones. Cuando APL*Plus se transformó en APL+Win sus propietarios decidieron distribuir la última versión gratuitamente. En el sitio enlazado se recomienda combinar APLSE con la más completa documentación de APL*Plus PC Demo. Se ha comprobado que funcionan con DOSBox.

APLX era una versión comercial de MicroAPL Ltd. que ahora es distribuida gratuitamente por Dyalog Ltd. En el sitio de MicroAPL explican que decidieron dejar de mantenerla por la dificultad que eso suponía al usar tecnologías hoy obsoletas. No sé si eso quiere decir que puede ser difícil de instalar o usar. Para Linux, Mac OS y Windows. Bien documentada.

CAPLIB2 es una antigua (1992-1997) implementación de APL2 para Linux, Unix, HPUX y MS-DOS con licencia GPL. Como es habitual, la versión Linux es imposible (o muy difícil) de hacer funcionar en sistemas actuales. La versión ejecutable disponibe para MS-DOS (de 1992) sí funciona con DOSBox. Muy bien documentado. En los enlaces del sitio de la Universidad de Waterloo hay que cambiar "ftp://watserv1.uwaterloo.ca/languages" por "http://www.math.uwaterloo.ca/apl_archives". De todas formas ya he incluido enlaces directos a los ficheros más interesantes.

Dyalog es una importante versión de APL (basada en APL2 con extensiones de programación orientada a objetos y programación funcional) que se puede descargar gratuitamente para su uso no comercial. Para Windows, MacOS, Linux, Docker y Raspberry Pi.

dzaima/APL es una reimplementación de APL en Java. Tiene pinta de experimental, pero he podido instalarlo y probarlo sin problemas en Ubuntu 18.04 (hace falta javac). No parece que incluya una forma directa de introducir los signos APL con el teclado, hay que copiarlos de un fichero de texto incluido (UTF-8). Tiene también una versión para Android y se integra con Processing. Se puede probar on-line en https://tio.run/#apl-dzaima.

FreeAPL (archivo Freeapl.zip en la sección Downloads) es una versión de dominio público para Windows escrita por Tauno Ylinen a partir de APL\11. Probado en Windows 3.1 con DOSBox y en Ubuntu (18.04) con Wine (4.0.2).

Glee es un lenguaje interpretado de propósito general y orientado a vectores que copia elementos de lenguajes como APL, J y K. No es que sea APL, pero se parece. Por ejemplo, el equivalente a "ι 5" (iota 5) es "1..5". Parece tratarse de un proyecto personal que estuvo activo hasta el año 2004. Para Windows 95 y posteriores. Probado en Ubuntu (18.04) con Wine (4.0.2).

GNU APL es un intérprete libre integrado en el proyecto GNU. Es una implementación casi completa del estándar APL extendido, parecido a APL2. Funciona en Linux y Windows con Cygwin. No parece haber paquetes en los repositorios de Ubuntu, pero sí hay paquetes deb en el sitio ofical. También hay una versión que funciona directamente en el navegador y otra para Docker.

I-APL es un intérprete para MS-DOS, Atari-ST y MacOS (también está disponible el código fuente). Es del año 1987 y según el fichero READ.ME es solo para uso no comercial. Funciona con DOSBox, pero creo que no incluye ninguna documentación (había que comprarla aparte en papel).

J es un dialecto de APL, también creado por Ken Iverson junto a Roger Hui. Se puede descargar gratuitamente (desde 2011 tiene licencia GPL) y hay versiones para Windows, MacOS X, Linux, Android y Raspberry Pi. Se distribuye con una amplia documentación (también disponible en el sitio). En el archivo de la Universidad de Waterloo hay versiones antiguas. En este sitio se puede probar en línea una versión mínima de J.

Después de A+, Arthur Whitney desarrolló un nuevo lenguaje llamado K. Sobre este lenguaje (¿o sobre Q, a su vez basado en K4?) está construida la base de datos kdb+. Kx Systems distribuye versiones gratuitas de kdb+ para uso personal. Para descargarlas hay que rellenar antes un formulario. La versión de 32 bits puede tener una limitación de tiempo de uso continuo (por ejemplo dos horas). La versión de 64 bits necesita comunicarse regularmente con los servidores de Kx así que requiere conexión a Internet; además, los programas caducan a los seis meses (!). Para Windows, Linux y OSX.

Kona es una versión de código abierto de K3 (o k3; tercera versión de K, entiendo). Disponible para Windows, OSX, Linux y Android. Solo hay ejecutable para Windows, pero se instala sin problemas (Ubuntu 18.04) siguiendo las sencillas instrucciones del sitio. Hay listas de correo y una wiki con bastante documentación.

MVT for APL es una versión resucitada de APL\360, un APL para el ordenador IBM S/360 que puede considerarse la primera implementación jamás publicada de este lenguaje. Aunque está bien documentado, definitivamente no es algo para el gran público. Pero oye, sí que permite programar en APL. Para Windows, Mac, Linux y ARM.

NARS2000 es un intérprete experimental de APL libre y para Windows de 32 o 64 bits (a partir de Windows 7). En el sitio se menciona que funciona con Wine (y he comprobado que es verdad). Está documentado (parece que bastante bien) en una wiki online. Se ve interesante para aprender el lenguaje.

OpenAPLes una actualización de 2004 de una actualización de 1998 de APL\11 (que a su vez estaba basada en otra versión anterior de Ken Thompson, uno de los creadores de Unix). A pesar de su larga historia, aún está en fase alfa. Parece bien documentado, pero solo se distribuye en forma de código fuente y yo no tenido suerte intentando instalarlo.

Q'Nial es un intérprete (el único que existe, me parece) del lenguaje Nial, creado en la Universidad de Queen en Kingston, Ontario. El objetivo de Nial es combinar las fortalezas de la programación basada en vectores (arrays) propia de APL con conceptos tomados de Lisp, ideas de programación estructurada de Algol y conceptos de programación funcional de FP. Así que no es APL, pero tiene cosas parecidas. El equivalente a "iota 5" es "count 5". Actualmente se distribuye con licencia libre para Linux, OSX, Raspbian y Windows. (Y viene ya precompilado: así da gusto.)

I.P. Sharp-APL/PC era una implementación para PC de un APL que se ejecutaba en el ordenador mainframe Amdahl V8. La versión shareware enlazada funciona con DOSBox, pero apenas incluye documentación. En este sitio de GEMESYS hay un paquete (es el fichero sapl.zip) con alguna información adicional.

A partir de 1993, los productos de I.P. Sharp Associates fueron distribuidos por Soliton Incorporated y la versión para Linux de Sharp APL era gratuita para uso personal, pero ahora parece imposible encontrarlo. Actualmente el dominio www.soliton.com es propiedad de una empresa de productos médicos.


Última revisión: 1 de noviembre de 2019

Código XHTML 1.0 validado