🔣 APL — 1966

⬅️ Atlas · 🗂️ Todas las fichas · 📚 Índice de clases

APL es el lenguaje más raro de este Atlas y uno de los más influyentes: usa un alfabeto propio de símbolos matemáticos, necesitaba un teclado especial, y cada símbolo es una operación sobre arreglos completos. Un programa APL de una línea puede hacer lo que en otro lenguaje son treinta —y esa densidad es a la vez su virtud y la razón de su marginalidad.

🎯 Por qué está en este programa

APL es un primo de la familia array / científica (Atlas), que no tiene representante en el núcleo — su influencia llega al curso por R, NumPy, Julia, MATLAB y el Fortran moderno.

Aporta al programa la programación por arreglos en su forma original y más pura (clase 089): el pensamiento sin bucles, con operadores que se combinan. Es el antepasado directo de todo lo vectorizado que se hace hoy.

Año 1966 (implementado); la notación es de 1957-1962
Autoría Kenneth E. Iverson, Harvard e IBM — Premio Turing 1979
Familia Array / científica
Paradigma Funcional y por arreglos, con operadores de orden superior
Tipado Dinámico; todo es un arreglo —un escalar es un arreglo de rango 0—
Memoria Recolección de basura
Ejecución Interpretado, con primitivas muy optimizadas
Estado 🟡 Vivo en nichos: finanzas, actuarial y seguros; comunidad pequeña y activa

📜 Historia

Kenneth Iverson no diseñó APL como lenguaje de programación: lo diseñó como notación matemática para describir algoritmos, y lo publicó en 1962 en un libro cuyo título es literalmente A Programming Language — de donde sale el acrónimo.

Durante años fue una notación en papel para enseñar y para describir arquitecturas. IBM la usó para especificar formalmente el System/360, antes de que existiera un intérprete.

En 1966, IBM implementó APL\360, y ocurrió algo inesperado: el sistema de tiempo compartido con APL se convirtió en una herramienta de análisis de negocio. Actuarios, financieros y analistas —no programadores— empezaron a usarlo directamente, porque una operación sobre una tabla entera se escribía en una línea.

Iverson recibió el Premio Turing en 1979, y su conferencia —Notation as a Tool of Thought— es uno de los mejores textos que se han escrito sobre por qué la notación importa: una buena notación no solo expresa las ideas, ayuda a tenerlas.

Después Iverson diseñó J (1990), que conserva la semántica y sustituye los símbolos por ASCII — resolviendo el problema del teclado a costa de la legibilidad.

🏭 Dónde vive hoy

🧠 Lo que enseña: notación como herramienta de pensamiento

El ejemplo clásico. Esto calcula la media de un vector:

(+/x) ÷ ≢x

Y se lee: la suma acumulada (+/) de x, dividida entre la cuenta (≢) de x.

Y este es el ejemplo más famoso — la criba de Eratóstenes en una línea:

(~R∊R∘.×R)/R←1↓⍳N

Dos ideas hacen posible esa densidad, y las dos están en todos los lenguajes vectorizados de hoy:

Una, los operadores actúan sobre estructuras completas. No hay bucles porque no hacen falta: +/ es la reducción, ∘.× es el producto exterior, ⍳ genera un rango.

Y dos, los operadores se combinan. / no es una función: es un operador de orden superior que recibe una función y devuelve otra. +/ es "reducir con suma", ×/ es "reducir con producto", ⌈/ es "el máximo". Es fold de la clase 115, veinte años antes de que la programación funcional lo popularizara.

Y el precio hay que decirlo, porque define su historia: APL es de escritura rápida y de lectura lentísima. Un programa denso es difícil de revisar (clase 146), y su fama de "lenguaje de solo escritura" —merecida a medias— junto con la necesidad de un teclado especial lo dejaron fuera de la corriente principal.

Y aun así ganó: la idea sobrevivió sin los símbolos. Cuando alguien escribe np.sum(a * b, axis=0) o datos |> filtrar |> resumir, está pensando como Iverson (clase 089).

🔄 Lo que se ha modernizado

⚙️ Cómo se ejecuta hoy

apl --script main.apl          # GNU APL
dyalog -script main.apls        # Dyalog
# Y en el navegador: tryapl.org, sin instalar nada

🧪 El programa de la clase 041 en APL

Esta versión se escribe aquí y no está verificada en CI (clase 040).

⍝ Leer la línea, convertirla en tres números y calcular el total
v ← ⍎⍞                          ⍝ ⍞ lee una línea; ⍎ la evalúa como expresión APL
total ← (v[1] × v[2]) × 1 - v[3]
⍝ Y con la reducción, sin índices:
total ← (×/ 2↑v) × 1 - ⊃⌽v
⎕ ← 'Total: ', ⍕2 ⍕ total

Lo que hay que ver, y es lo más didáctico de la ficha.

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🗂️ Todas las fichas · 🔗 Relacionadas: J · R · Julia · MATLAB · Fortran