APL (llamado así por el libro A Programming Language ) [ 3 ] es un lenguaje de programación desarrollado en la década de 1960 por Kenneth E. Iverson . Su tipo de dato central es la matriz multidimensional . Utiliza una amplia gama de símbolos gráficos especiales [ 4 ] para representar la mayoría de las funciones y operadores, lo que da como resultado un código muy conciso. Ha tenido una influencia importante en el desarrollo del modelado de conceptos, las hojas de cálculo , la programación funcional [ 5 ] y los paquetes de matemáticas computacionales [ 6 ] . También ha inspirado otros lenguajes de programación [ 7 ] [ 8 ] .
Historia
Notación matemática
Kenneth E. Iverson desarrolló una notación matemática para manipular matrices , comenzando en 1957 en la Universidad de Harvard . En 1960, comenzó a trabajar para IBM , donde desarrolló esta notación con Adin Falkoff y la publicó en su libro A Programming Language en 1962. [ 3 ] El prefacio expone su premisa:
Las matemáticas aplicadas se ocupan principalmente del diseño y análisis de procedimientos explícitos para calcular los valores exactos o aproximados de diversas funciones. Dichos procedimientos explícitos se denominan algoritmos o programas . Dado que una notación eficaz para la descripción de programas presenta una estructura sintáctica considerable, se denomina lenguaje de programación .
Esta notación se utilizaba internamente en IBM para informes de investigación breves sobre sistemas informáticos, como el Burroughs B5000 y su mecanismo de pila, cuando IBM estaba evaluando las máquinas de pila frente a las máquinas de registro para los ordenadores futuros.
Iverson también utilizó su notación en un borrador del capítulo Un lenguaje de programación , escrito para un libro que estaba escribiendo con Fred Brooks , Procesamiento automático de datos , que se publicaría en 1963. [ 9 ] [ 10 ]
En 1979, Iverson recibió el Premio Turing por su trabajo sobre APL. [ 11 ]
Desarrollo en un lenguaje de programación informática
Ya en 1962, se produjo el primer intento de utilizar esta notación para describir un sistema informático completo, después de que Falkoff comentara con William C. Carter su trabajo para estandarizar el conjunto de instrucciones de las máquinas que más tarde se convertirían en la familia IBM System/360 .
En 1963, Herbert Hellerman, que trabajaba en el Instituto de Investigación de Sistemas de IBM, implementó parte de la notación en una computadora IBM 1620 , y fue utilizada por estudiantes en un curso especial de bachillerato sobre el cálculo de funciones trascendentales mediante la suma de series. Los estudiantes probaron su código en el laboratorio de Hellerman. Esta implementación de parte de la notación se denominó Traductor de Matrices Personalizado (PAT). [ 12 ]
En 1963, Falkoff, Iverson y Edward H. Sussenguth Jr. , todos empleados de IBM, utilizaron la notación para una descripción formal de la arquitectura y funcionalidad de la serie de máquinas IBM System/360 , lo que dio como resultado un artículo publicado en IBM Systems Journal en 1964. Tras su publicación, el equipo centró su atención en la implementación de la notación en un sistema informático. Una de las motivaciones para este enfoque fue el interés de John L. Lawrence, quien asumió nuevas responsabilidades en Science Research Associates , una empresa educativa adquirida por IBM en 1964. Lawrence solicitó a Iverson y a su grupo que colaboraran en el uso del lenguaje como herramienta para el desarrollo y la utilización de ordenadores en la educación. [ 13 ]
Después de que Lawrence M. Breed y Philip S. Abrams de la Universidad de Stanford se unieran al equipo de IBM Research, continuaron su trabajo previo en una implementación programada en FORTRAN IV para una parte de la notación que se había hecho para la computadora IBM 7090 que se ejecutaba en el sistema operativo IBSYS . Este trabajo se terminó a finales de 1965 y más tarde se denominó IVSYS (por sistema Iverson). Abrams describió en detalle la base de esta implementación en un informe técnico de la Universidad de Stanford, "Un intérprete para la notación Iverson" en 1966. El aspecto académico de esto fue supervisado formalmente por Niklaus Wirth . [ 14 ] Al igual que el sistema PAT de Hellerman anterior, esta implementación omitió el conjunto de caracteres APL, pero usó palabras reservadas especiales en inglés para funciones y operadores. El sistema fue posteriormente adaptado para un sistema de tiempo compartido y, en noviembre de 1966, había sido reprogramado para la computadora IBM System/360 Modelo 50 que se ejecutaba en modo de tiempo compartido y se usó internamente en IBM. [ 15 ]
Hardware


Un avance clave en la capacidad de usar APL de manera efectiva, antes del uso generalizado de terminales de tubo de rayos catódicos (CRT), fue el desarrollo de un elemento de escritura intercambiable especial de la máquina de escribir IBM Selectric con todos los caracteres especiales de APL. Este se usaba en estaciones de trabajo con terminales de impresión en papel que utilizaban el mecanismo de la máquina de escribir Selectric y el elemento de escritura, como los terminales IBM 1050 e IBM 2741. Se podían colocar tapas sobre las teclas normales para mostrar qué caracteres APL se introducirían y escribirían al pulsar cada tecla. Por primera vez, un programador podía escribir y ver los caracteres APL correctos, tal como se usaban en la notación de Iverson, sin verse obligado a usar representaciones de palabras clave en inglés que resultan incómodas. Falkoff e Iverson diseñaron los elementos de escritura especiales APL Selectric, 987 y 988, a finales de 1964, aunque no existía ningún sistema informático APL disponible para usarlos. [ 16 ] Iverson citó a Falkoff como la inspiración para la idea de usar un elemento de escritura IBM Selectric para el conjunto de caracteres APL. [ 17 ]
Muchos símbolos APL, incluso con los caracteres APL en el elemento de escritura Selectric, debían escribirse superponiendo dos caracteres existentes. Un ejemplo es el carácter de grado superior , que debía crearse con una delta (Mayús+H) y un trazo de Sheffer (Mayús+M). Esto era necesario porque el conjunto de caracteres APL era mucho mayor que los 88 caracteres permitidos en el elemento de escritura, incluso cuando las letras estaban restringidas a mayúsculas.
El terminal de visualización de computadora Tektronix 4013 es un Tektronix 4010 con los conjuntos de caracteres APL y ASCII. [ 18 ] Hay un interruptor basculante encima de las teclas para seleccionar el conjunto de caracteres. [ 19 ]
Disponibilidad comercial
El primer inicio de sesión interactivo en APL y la creación de un espacio de trabajo de APL se produjo en 1966 por Larry Breed utilizando una terminal IBM 1050 en los Laboratorios IBM Mohansic cerca del Centro de Investigación Thomas J. Watson , sede de APL, en Yorktown Heights , Nueva York. [ 16 ]
IBM fue la principal responsable de introducir APL en el mercado. La primera versión pública de APL se lanzó en 1968 para la IBM 1130. IBM proporcionó APL\1130 de forma gratuita, pero sin responsabilidad ni soporte. [ 20 ] [ 21 ] Podía funcionar con tan solo 8k palabras de memoria de 16 bits y utilizaba un disco duro dedicado de 1 megabyte.
APL se afianzó en los sistemas de tiempo compartido de mainframes desde finales de la década de 1960 hasta principios de la de 1980, en parte porque admitía múltiples usuarios en sistemas de especificaciones inferiores que no contaban con hardware de traducción dinámica de direcciones . [ 22 ] Las mejoras adicionales en el rendimiento para determinados sistemas mainframe IBM System/370 incluyeron el microcódigo APL Assist, que incorporaba cierto soporte para la ejecución de APL en el firmware del procesador , en lugar de implementarse completamente mediante software de nivel superior. Un poco más tarde, a medida que el hardware con el rendimiento adecuado comenzó a estar disponible a mediados y finales de la década de 1980, muchos usuarios migraron sus aplicaciones al entorno de las computadoras personales.
Los primeros intérpretes APL de IBM para el hardware IBM 360 e IBM 370 implementaban su propia gestión multiusuario en lugar de depender de los servicios del host, por lo que eran sus propios sistemas de tiempo compartido. Introducido por primera vez para su uso en IBM en 1966, el sistema APL\360 [ 23 ] [ 24 ] [ 25 ] era un intérprete multiusuario. La capacidad de comunicarse programáticamente con el sistema operativo para obtener información y configurar variables del sistema del intérprete se realizaba a través de funciones privilegiadas especiales de "I-beam", utilizando operaciones tanto monádicas como diádicas . [ 26 ]
En 1973, IBM lanzó APL.SV , una continuación del mismo producto que ofrecía variables compartidas para acceder a funciones externas al sistema APL, como archivos del sistema operativo. A mediados de la década de 1970, el intérprete de mainframe de IBM incluso se adaptó para su uso en el ordenador de sobremesa IBM 5100 , que contaba con un pequeño monitor CRT y un teclado APL, mientras que la mayoría de los ordenadores pequeños de la época solo ofrecían BASIC . En la década de 1980, el programa VSAPL gozó de gran popularidad entre los usuarios de Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/SP y CICS .
En 1973–1974, Patrick E. Hagerty dirigió la implementación del intérprete APL de la Universidad de Maryland para la línea 1100 de las computadoras centrales Sperry UNIVAC serie 1100/2200 . [ 27 ] En 1974, al estudiante Alan Stebbens se le asignó la tarea de implementar una función interna. [ 28 ] Xerox APL estuvo disponible desde junio de 1975 para las computadoras centrales Xerox 560 y Sigma 6, 7 y 9 que ejecutaban CP-V y para Honeywell CP-6 . [ 29 ]
En las décadas de 1960 y 1970, surgieron varias empresas de tiempo compartido que vendían servicios APL utilizando versiones modificadas del intérprete IBM APL\360 [ 25 ] . En Norteamérica, las más conocidas fueron IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) y The Computer Company (TCC). CompuServe también entró en el mercado en 1978 con un intérprete APL basado en una versión modificada del de Digital Equipment Corp y Carnegie Mellon, que se ejecutaba en las máquinas KI y KL de 36 bits de DEC. El APL de CompuServe estaba disponible tanto para su mercado comercial como para el servicio de información al consumidor. Con la llegada primero de mainframes más económicos como el IBM 4300 , y más tarde de la computadora personal, a mediados de la década de 1980, la industria del tiempo compartido prácticamente había desaparecido.
Sharp APL estaba disponible a través de IP Sharp Associates, primero como un servicio de tiempo compartido en la década de 1960 y más tarde como un producto de software a partir de 1979 aproximadamente. Sharp APL era una implementación avanzada de APL con muchas extensiones de lenguaje, como paquetes (la capacidad de colocar uno o más objetos en una sola variable), un sistema de archivos, matrices anidadas y variables compartidas .
También se podían obtener intérpretes de APL de otros fabricantes de ordenadores centrales y minicomputadoras, en particular Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens , Xerox y otros.
Garth Foster, de la Universidad de Syracuse, patrocinó reuniones periódicas de la comunidad de implementadores de APL en el Centro de Conferencias Minnowbrook de Syracuse, en Blue Mountain Lake, Nueva York . Años más tarde, Eugene McDonnell organizó reuniones similares en el recinto de conferencias de Asilomar, cerca de Monterey , California , y en Pajaro Dunes, cerca de Watsonville , California. El grupo de interés especial SIGAPL de la Association for Computing Machinery continúa brindando apoyo a la comunidad APL. [ 30 ]
Microcomputadoras
En los microordenadores, que estuvieron disponibles a partir de mediados de la década de 1970, BASIC se convirtió en el lenguaje de programación dominante. [ 31 ] Sin embargo, algunos microordenadores ofrecían APL en su lugar; el primero fue el MCM/70 basado en Intel 8008 , lanzado en 1974 [ 32 ] [ 33 ] y que se utilizó principalmente en la educación. [ 34 ] Otra máquina de esta época fue el VideoBrain Family Computer , lanzado en 1977, que se suministraba con su dialecto de APL llamado APL/S. [ 35 ]
El Commodore SuperPET , presentado en 1981, incluía un intérprete APL desarrollado por la Universidad de Waterloo . [ 36 ]
En 1976, Bill Gates afirmó en su Carta Abierta a los Aficionados que Microsoft Corporation estaba implementando APL para Intel 8080 y Motorola 6800, pero tenía "muy pocos incentivos para ponerlo [a disposición] de los aficionados" debido a la piratería de software . [ 37 ] Nunca se lanzó.
APL2
A principios de la década de 1980, el desarrollo de IBM APL, bajo el liderazgo de Jim Brown , implementó una nueva versión del lenguaje APL que contenía como mejora principal el concepto de matrices anidadas , donde una matriz puede contener otras matrices, y nuevas características del lenguaje que facilitaban la integración de matrices anidadas en el flujo de trabajo del programa. Ken Iverson, que ya no controlaba el desarrollo del lenguaje APL, dejó IBM y se unió a IP Sharp Associates , donde una de sus principales contribuciones fue dirigir la evolución de Sharp APL para que estuviera más en consonancia con su visión. [ 38 ] [ 39 ] [ 40 ] APL2 se lanzó por primera vez para CMS y TSO en 1984. [ 41 ] La edición APL2 Workstation (Windows, OS/2 , AIX , Linux y Solaris ) le siguió más tarde. [ 42 ] [ 43 ]
Mientras otros proveedores estaban ocupados desarrollando intérpretes APL para nuevo hardware, especialmente microcomputadoras basadas en Unix , APL2 era casi siempre el estándar elegido para el desarrollo de nuevos intérpretes APL. Incluso hoy en día, la mayoría de los proveedores de APL o sus usuarios citan la compatibilidad con APL2 como un punto de venta para esos productos. [ 44 ] [ 45 ] IBM cita su uso para la resolución de problemas, diseño de sistemas, creación de prototipos, ingeniería y cálculos científicos, sistemas expertos, [ 46 ] para la enseñanza de matemáticas y otras materias, visualización y acceso a bases de datos. [ 47 ]
Implementaciones modernas
Las diversas implementaciones de APL, desarrolladas por APLX, Dyalog y otros, incluyen extensiones para programación orientada a objetos , compatibilidad con .NET , primitivas de conversión de matrices XML, gráficos, interfaces con sistemas operativos y expresiones de cálculo lambda . Entre las versiones gratuitas se encuentran GNU APL para Linux y NARS2000 para Windows (que también se ejecuta en Linux con Wine). Ambas son versiones bastante completas de APL2 con diversas extensiones de lenguaje.
Lenguas derivadas
APL ha constituido la base de, o ha influido en, los siguientes lenguajes:
- A y A+ , una APL alternativa, esta última con extensiones gráficas.
- FP , un lenguaje de programación funcional.
- Ivy, un intérprete para un lenguaje similar a APL desarrollado por Rob Pike , y que utiliza ASCII como entrada. [ 48 ]
- J , que también fue diseñado por Iverson, y que utiliza ASCII con dígrafos en lugar de símbolos especiales. [ 7 ]
- K , una variante patentada de APL desarrollada por Arthur Whitney. [ 8 ]
- MATLAB , una herramienta de cálculo numérico. [ 6 ]
- Nial , un lenguaje de programación de alto nivel para matrices con notación de programación funcional.
- Lenguaje de programación polimórfico , un lenguaje interactivo y extensible con un lenguaje base similar.
- S , un lenguaje de programación estadística (que ahora se suele encontrar en su versión de código abierto conocida como R ).
- Snap !, un lenguaje de programación de bajo código basado en bloques, nació como una reimplementación extendida de Scratch.
- Speakeasy , un entorno interactivo de computación numérica.
- Wolfram Language , el lenguaje de programación de Mathematica . [ 49 ]
Características del lenguaje
Conjunto de caracteres
APL ha sido criticado y elogiado por su elección de un conjunto de caracteres único. En las décadas de 1960 y 1970, pocos dispositivos terminales o incluso pantallas podían reproducir el conjunto de caracteres APL. Los más populares empleaban el mecanismo de impresión IBM Selectric con un elemento de tipo APL especial. Uno de los primeros terminales de línea APL (solo operación en modo de línea, no en pantalla completa) fue el Texas Instruments TI Modelo 745 ( c. 1977 ) con el conjunto de caracteres APL completo [ 50 ] que presentaba modos de telecomunicaciones semidúplex y dúplex completo , para interactuar con un servicio de tiempo compartido APL o un mainframe remoto para ejecutar un trabajo de computadora remota, entrada remota de trabajos (RJE).
Con el tiempo, gracias al uso generalizado de pantallas gráficas de alta calidad, dispositivos de impresión y compatibilidad con Unicode , el problema de la fuente de caracteres APL se ha eliminado en gran medida. Sin embargo, la introducción de caracteres APL requiere el uso de editores de métodos de entrada , asignaciones de teclado, conjuntos de símbolos APL virtuales/en pantalla, [ 51 ] [ 52 ] o tarjetas de teclado impresas de fácil consulta, lo que puede resultar frustrante para los principiantes acostumbrados a otros lenguajes de programación. [ 53 ] [ 54 ] [ 55 ] En un estudio realizado con estudiantes de secundaria que no tenían experiencia previa con otros lenguajes de programación, se constató que escribir y usar caracteres APL no suponía ningún obstáculo significativo para los estudiantes. [ 56 ]
En defensa de APL, cabe mencionar que requiere menos caracteres para escribir y que las asignaciones de teclado se memorizan con el tiempo. También existen teclados especiales para APL que se utilizan actualmente, así como fuentes de descarga gratuita para sistemas operativos como Microsoft Windows. [ 51 ] Las ganancias de productividad reportadas presuponen que se dedica el tiempo suficiente al lenguaje como para que valga la pena memorizar los símbolos, su semántica, las asignaciones de teclado y muchas expresiones idiomáticas para tareas comunes.
Diseño
A diferencia de los lenguajes de programación estructurados tradicionalmente, el código APL se estructura típicamente como cadenas de funciones monádicas o diádicas y operadores [ 57 ] que actúan sobre arreglos . [ 58 ] APL tiene muchas primitivas no estándar (funciones y operadores) que se indican mediante un solo símbolo o una combinación de varios símbolos. Todas las primitivas se definen con la misma precedencia y siempre se asocian a la derecha. Por lo tanto, APL se lee o se entiende mejor de derecha a izquierda .
Las primeras implementaciones de APL ( alrededor de 1970 ) carecían de estructuras de control de flujo de bucles de programación , como bucles o doconstrucciones . En su lugar, utilizaban operaciones con matrices, y el uso de construcciones de programación estructurada solía ser innecesario, ya que una operación podía realizarse sobre una matriz completa en una sola instrucción. Por ejemplo, la función ( ) puede reemplazar la iteración de un bucle for : ιN, cuando se aplica a un entero positivo escalar, produce una matriz unidimensional (vector), 1 2 3 ... N. Las implementaciones posteriores de APL generalmente incluyen estructuras de control completas, de modo que la estructura de datos y el flujo de control del programa pueden separarse de forma clara y precisa.whileif-then-elseiotaι
El entorno APL se denomina espacio de trabajo . En un espacio de trabajo, el usuario puede definir programas y datos; es decir, los valores de los datos existen también fuera de los programas, y el usuario puede manipularlos sin necesidad de definir un programa. [ 59 ] En los ejemplos siguientes, el intérprete APL primero escribe seis espacios antes de esperar la entrada del usuario. Su propia salida comienza en la primera columna.
El usuario puede guardar el espacio de trabajo con todos los valores, programas y estado de ejecución.
APL utiliza un conjunto de símbolos no ASCII , que son una extensión de la notación aritmética y algebraica tradicional. El uso de nombres de un solo carácter para funciones vectoriales de una sola instrucción y múltiples datos ( SIMD ) es una forma en que APL permite la formulación compacta de algoritmos para la transformación de datos, como el cálculo del Juego de la Vida de Conway en una sola línea de código. [ 60 ] En casi todas las versiones de APL, es teóricamente posible expresar cualquier función computable en una sola expresión, es decir, en una sola línea de código.
Debido al conjunto de caracteres inusual , muchos programadores usan teclados especiales con teclas APL para escribir código APL. [ 61 ] Aunque hay varias formas de escribir código APL usando solo caracteres ASCII, [ 62 ] en la práctica casi nunca se hace. (Esto puede considerarse que apoya la tesis de Iverson sobre la notación como una herramienta de pensamiento . [ 63 ] ) La mayoría, si no todas, las implementaciones modernas usan diseños de teclado estándar, con asignaciones especiales o editores de métodos de entrada para acceder a caracteres no ASCII. Históricamente, la fuente APL ha sido distintiva, con caracteres alfabéticos en cursiva mayúscula y números y símbolos en vertical. La mayoría de los proveedores continúan mostrando el conjunto de caracteres APL en una fuente personalizada.
Los defensores de APL afirman que los ejemplos de código de solo escritura (código mal escrito y casi incomprensible) son casi invariablemente ejemplos de malas prácticas de programación o errores de principiante, que pueden ocurrir en cualquier lenguaje. También afirman ser mucho más productivos con APL que con lenguajes de programación más convencionales, y que el software funcional se puede implementar en mucho menos tiempo y con muchos menos programadores que con otras tecnologías.
También pueden argumentar que, debido a su compacidad y concisión, APL se presta bien al desarrollo de software a gran escala y a la complejidad, ya que el número de líneas de código se puede reducir considerablemente. Muchos defensores y profesionales de APL también consideran que los lenguajes de programación estándar como COBOL y Java son comparativamente tediosos. APL se encuentra a menudo donde el tiempo de comercialización es importante, como en los sistemas de negociación. [ 64 ] [ 65 ] [ 66 ] [ 67 ]
Terminología
APL establece una clara distinción entre funciones y operadores . [ 57 ] [ 68 ] Las funciones toman arreglos (variables, constantes o expresiones) como argumentos y devuelven arreglos como resultados. Los operadores (similares a las funciones de orden superior ) toman funciones o arreglos como argumentos y derivan funciones relacionadas. Por ejemplo, la función suma se deriva aplicando el operador de reducción a la función suma . Aplicando el mismo operador de reducción a la función máximo (que devuelve el mayor de dos números) se deriva una función que devuelve el mayor de un grupo (vector) de números. En el lenguaje J, Iverson sustituyó los términos verbo por función y adverbio o conjunción por operador .
APL también identifica como primitivas aquellas características integradas en el lenguaje, representadas por un símbolo o una combinación fija de símbolos . La mayoría de las primitivas son funciones u operadores. Programar en APL consiste principalmente en escribir funciones no primitivas y (en algunas versiones de APL) operadores. Sin embargo, algunas primitivas no se consideran ni funciones ni operadores, siendo la asignación la más notable.
Algunas palabras utilizadas en la literatura de APL tienen significados que difieren tanto de los que se usan en matemáticas como de los que se usan en general en informática.
Sintaxis
APL tiene representaciones explícitas de funciones, operadores y sintaxis, proporcionando así una base para la declaración clara y explícita de las funcionalidades extendidas del lenguaje y herramientas para experimentar con ellas. [ 72 ]
Ejemplos
Hola Mundo
Esto muestra " Hola, mundo ":
'Hola Mundo'Una de las características de diseño de APL es definir acciones predeterminadas en algunos casos que producirían errores de sintaxis en la mayoría de los demás lenguajes de programación.
La cadena constante 'Hola, mundo' que aparece arriba se muestra porque mostrar es la acción predeterminada en cualquier expresión para la que no se especifica ninguna acción explícitamente (por ejemplo, asignación, parámetro de función).
Exponenciación
Otro ejemplo de este tema es que la exponenciación en APL se escribe como 2*3, lo que indica elevar 2 a la potencia 3 (esto se escribiría como 2^3o 2**3en algunos lenguajes, o se relegaría a una llamada a función como pow(2, 3);en otros). Muchos lenguajes usan *para significar multiplicación, como en 2*3, pero APL elige usar 2×3. Sin embargo, si no se especifica ninguna base (como con la instrucción *3en APL, o ^3en otros lenguajes), la mayoría de los lenguajes de programación lo verían como un error de sintaxis. APL, sin embargo, asume que la base faltante es la constante del logaritmo natural e , e interpreta *3como 2.71828*3.
Estadísticas simples
Supongamos que Xes una matriz de números. Entonces (+/X)÷⍴Xda su media. Leyendo de derecha a izquierda , ⍴Xda el número de elementos en X, y como ÷es un operador diádico, también se requiere el término a su izquierda. Está rodeado de paréntesis porque de lo contrario se tomaría X (de modo que la suma sería de X÷⍴X—cada elemento de X dividido por el número de elementos en X), y +/Xda la suma de los elementos de X. Partiendo de esto, la siguiente expresión calcula la desviación estándar :
(( + / (( X - ( + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0.5Naturalmente, se definiría esta expresión como una función para su uso repetido en lugar de reescribirla cada vez. Además, dado que la asignación es un operador, puede aparecer dentro de una expresión, por lo que lo siguiente colocaría valores adecuados en T, AV y SD:
SD ← (( + / (( X - AV ← ( T ← + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0,5Elige 6 números de lotería
La siguiente expresión en modo inmediato genera un conjunto típico de números de lotería Pick 6 : seis números enteros pseudoaleatorios que van del 1 al 40, garantizados como no repetitivos , y los muestra ordenados en orden ascendente:
x [ ⍋ x ← 6 ? 40 ]Lo anterior hace mucho, de forma concisa, aunque puede parecer complejo para un nuevo usuario de APL . Combina las siguientes funciones de APL (también llamadas primitivas [ 73 ] y glifos [ 74 ] ):
- La primera en ejecutarse (APL se ejecuta de derecha a izquierda) es una función diádica
?(nombradadealcuando es diádica) que devuelve un vector compuesto por un número selecto (argumento izquierdo: 6 en este caso) de enteros aleatorios que van desde 1 hasta un máximo especificado (argumento derecho: 40 en este caso), que, si dicho máximo ≥ longitud del vector, se garantiza que no se repite; por lo tanto, genera/crea 6 enteros aleatorios que van desde 1 hasta 40. [ 75 ] - Este vector se asigna luego (
←) a la variablex, porque se necesita más adelante. - Este vector se ordena luego en orden ascendente mediante una
⍋función monádica, cuyo argumento derecho incluye todo lo que se encuentra a su derecha hasta el siguiente paréntesis o corchete de cierre no balanceado. El resultado⍋son los índices que ordenarán su argumento en orden ascendente. - Luego, el resultado
⍋se utiliza para indexar la variablex, que guardamos anteriormente para este propósito, seleccionando así sus elementos en secuencia ascendente .
Como no hay ninguna función a la izquierda de la x más a la izquierda que le indique a APL qué hacer con el resultado, simplemente lo muestra en la pantalla (en una sola línea, separada por espacios) sin necesidad de ninguna instrucción explícita para hacerlo.
?También tiene un equivalente monádico llamado roll, que simplemente devuelve un entero aleatorio entre 1 y su único operando [a su derecha], ambos inclusive. Por lo tanto, un programa de juego de rol podría usar la expresión ?20para lanzar un dado de veinte caras.
Números primos
La siguiente expresión encuentra todos los números primos del 1 al R. Tanto en tiempo como en espacio, la complejidad del cálculo es(en notación Big O ).
( ~ R ∊ R ∘. × R ) / R ← 1 ↓⍳ REjecutado de derecha a izquierda, esto significa:
- Iota
⍳crea un vector que contiene enteros desde1hastaR(siR= 6al inicio del programa,⍳Res1 2 3 4 5 6) - Elimine el primer elemento de este vector (
↓función), es decir,1. Entonces1↓⍳Res2 3 4 5 6 - Establecer
Ral nuevo vector (←, primitiva de asignación ), es decir,2 3 4 5 6 - The
/replicate operator is dyadic (binary) and the interpreter first evaluates its left argument (fully in parentheses): - Generate outer product of
Rmultiplied byR, i.e., a matrix that is the multiplication table of R by R (°.×operator), i.e.,
- Build a vector the same length as
Rwith1in each place where the corresponding number inRis in the outer product matrix (∈, set inclusion or element of or Epsilon operator), i.e.,0 0 1 0 1 - Logically negate (not) values in the vector (change zeros to ones and ones to zeros) (
∼, logical not or Tilde operator), i.e.,1 1 0 1 0 - Select the items in
Rfor which the corresponding element is1(/replicate operator), i.e.,2 3 5
(This assumes the APL origin is 1, i.e., indices start with 1. APL can be set to use 0 as the origin, so that ι6 is 0 1 2 3 4 5, which is convenient for some calculations.)
Sorting
The following expression sorts a word list stored in matrix X according to word length:
X[⍋X+.≠' ';]Game of Life
The following function "life", written in Dyalog APL,[76][77] takes a Boolean matrix and calculates the new generation according to Conway's Game of Life. It demonstrates the power of APL to implement a complex algorithm in very little code, but understanding it requires some advanced knowledge of APL (as the same program would in many languages).
life←{⊃1⍵∨.∧34=+/+⌿¯101∘.⊖¯101⌽¨⊂⍵}HTML tags removal
In the following example, also Dyalog, the first line assigns some HTML code to a variable txt and then uses an APL expression to remove all the HTML tags:
txt←'<html><body><p>This is <em>emphasized</em> text.</p></body></html>'{⍵/⍨~{⍵∨≠\⍵}⍵∊'<>'}txtThisisemphasizedtext.Naming
APL deriva su nombre de las iniciales del libro de Iverson , A Programming Language [ 3 ], aunque el libro describe la notación matemática de Iverson , en lugar del lenguaje de programación implementado que se describe en este artículo. El nombre se usa solo para implementaciones reales, comenzando con APL\360 .
Adin Falkoff acuñó el nombre en 1966 durante la implementación de APL\360 en IBM :
Al pasar por la oficina que compartían los tres estudiantes, oí una discusión. Asomé la cabeza por la puerta y Eric me preguntó: "¿No es cierto que todo el mundo sabe que la notación que usamos se llama APL?". Lamenté tener que decepcionarlo confesándole que nunca la había oído llamar así. ¿De dónde había sacado la idea de que era tan conocida? ¿Y quién había decidido llamarla así? De hecho, ¿por qué tenía que tener un nombre? Mucho tiempo después supe cómo se llamaba. Cuando comenzó el esfuerzo de implementación en junio de 1966, también comenzó el esfuerzo de documentación. Supongo que cuando tuvieron que escribir sobre "eso", Falkoff e Iverson se dieron cuenta de que tendrían que darle un nombre. Probablemente hubo muchas sugerencias en ese momento, pero solo he oído hablar de dos. Un grupo en SRA en Chicago que estaba desarrollando materiales didácticos usando la notación estaba a favor del nombre "Mathlab". Este nombre no cuajó. Otra sugerencia fue llamarlo "Las mejores matemáticas de Iverson" y dejar que la gente acuñara el acrónimo apropiado. Esto se consideró una broma.
Un día, Adin Falkoff entró en la oficina de Ken y escribió "Un lenguaje de programación" en la pizarra, y debajo el acrónimo "APL". Así nació. Apenas una semana después, Eric Iverson me hizo su pregunta, cuando el nombre aún no había recorrido los trece kilómetros por la autopista Taconic Parkway desde IBM Research hasta IBM Mohansic.
— Eugene McDonnell , [ 78 ]
APL se reinterpreta ocasionalmente como Lenguaje de Programación de Arreglos o Lenguaje de Procesamiento de Arreglos , [ 79 ] convirtiendo así a APL en un acrónimo inverso .
Logo

Siempre ha existido cooperación entre los proveedores de APL, y se celebraron conferencias conjuntas periódicamente desde 1969 hasta 2010. [ 80 ] En dichas conferencias, a menudo se repartían artículos promocionales de APL, con motivos de APL o colecciones de logotipos de proveedores. Eran comunes las manzanas (un juego de palabras basado en la similitud de pronunciación entre "apple" y "APL ") y el fragmento de código , que son los símbolos producidos por la distribución clásica del teclado APL al mantener pulsada la tecla modificadora APL y escribir "APL".⍺*⎕
A pesar de todos estos esfuerzos de la comunidad, no surgió ningún logotipo universal e independiente del proveedor para el lenguaje de programación. A medida que los lenguajes de programación populares han establecido cada vez más logotipos reconocibles, Fortran obtuvo uno en 2020, [ 81 ] la Asociación Británica de APL lanzó una campaña en la segunda mitad de 2021 para establecer un logotipo para APL, y después de una elección de la comunidad y varias rondas de comentarios, se eligió un logotipo en mayo de 2022. [ 82 ]
Usar
APL se utiliza para muchos propósitos, incluyendo aplicaciones financieras y de seguros , [ 83 ] inteligencia artificial , [ 84 ] [ 85 ] redes neuronales [ 86 ] y robótica . [ 87 ] Se ha argumentado que APL es una herramienta de cálculo y no un lenguaje de programación; [ 88 ] su naturaleza simbólica y capacidades de matrices lo han hecho popular entre expertos en dominios y científicos de datos [ 89 ] que no tienen o no requieren las habilidades de un programador de computadoras .
APL es muy adecuado para la manipulación de imágenes y la animación por computadora , donde las transformaciones gráficas se pueden codificar como multiplicaciones de matrices. Una de las primeras empresas comerciales de gráficos por computadora, Digital Effects , produjo un producto gráfico en APL llamado Visions , que se utilizó para crear anuncios de televisión y animación para la película Tron de 1982. [ 90 ] Más recientemente, el simulador de navegación Stormwind utiliza APL para implementar su lógica central, su interfaz con el middleware de la canalización de renderizado y una parte importante de su motor de física . [ 91 ]
Hoy en día, APL sigue utilizándose en una amplia gama de aplicaciones comerciales y científicas, [ 83 ] gestión de activos , [ 92 ] atención médica , [ 93 ] y perfilado de ADN . [ 94 ] [ 95 ]
Implementaciones destacadas
APL\360
La primera implementación de APL que utilizaba símbolos APL reconocibles fue APL\360, que se ejecutaba en el IBM System/360 y se completó en noviembre de 1966 [ 1 ] , aunque en ese momento solo se utilizaba dentro de IBM. [ 41 ] En 1973, sus implementadores, Larry Breed , Dick Lathwell y Roger Moore , recibieron el premio Grace Murray Hopper de la Association for Computing Machinery (ACM). Se les otorgó "por su trabajo en el diseño e implementación de APL\360, estableciendo nuevos estándares en simplicidad, eficiencia, confiabilidad y tiempo de respuesta para sistemas interactivos". [ 96 ] [ 97 ] [ 98 ]
En 1975, el microordenador IBM 5100 ofrecía APL\360 [ 99 ] como uno de los dos lenguajes interpretados integrados basados en ROM para el ordenador, completo con un teclado y una pantalla que admitían todos los símbolos especiales utilizados en el lenguaje. [ 100 ]
Entre los desarrollos más importantes de APL\360 se encuentran CMS/APL, que aprovechaba las capacidades de almacenamiento virtual de CMS , y APLSV, que introdujo variables compartidas , variables del sistema y funciones del sistema. Posteriormente, se adaptó a las plataformas IBM System/370 y VSPC hasta su lanzamiento final en 1983, tras el cual fue reemplazado por APL2. [ 41 ]
APL\1130
En 1968, APL\1130 se convirtió en el primer sistema APL disponible públicamente, creado por IBM para el IBM 1130. [ 101 ] Se convirtió en el software de biblioteca IBM Tipo III más popular que IBM lanzó. [ 20 ]
APL*Plus y Sharp APL
APL*Plus y Sharp APL son versiones de APL\360 con extensiones adicionales orientadas a negocios, como formato de datos y funciones para almacenar matrices APL en archivos externos. Fueron desarrolladas conjuntamente por dos empresas, empleando a varios miembros del equipo de desarrollo original de IBM APL\360. [ 102 ]
Las dos compañías eran IP Sharp Associates (IPSA), una compañía de servicios APL\360 formada en 1964 por Ian Sharp, Roger Moore y otros, y STSC , una compañía de servicios de consultoría y tiempo compartido formada en 1969 por Lawrence Breed y otros. Juntas desarrollaron APL*Plus y posteriormente continuaron trabajando juntas, pero desarrollando APL por separado como APL*Plus y Sharp APL. STSC adaptó APL*Plus a muchas plataformas, con versiones para VAX 11, [ 103 ] PC y UNIX, mientras que IPSA adoptó un enfoque diferente ante la llegada de la computadora personal y puso Sharp APL a disposición en esta plataforma utilizando hardware adicional PC-XT/360 . En 1993, se formó Soliton Incorporated para dar soporte a Sharp APL y desarrolló Sharp APL en SAX (Sharp APL para Unix). A partir de 2018, APL*Plus continúa como APL2000 APL+Win.
En 1985, Ian Sharp y Dan Dyer, del STSC, recibieron conjuntamente el Premio Kenneth E. Iverson por su destacada contribución a APL . [ 104 ]
APL2
APL2 fue una reimplementación significativa de APL por parte de IBM, que se desarrolló a partir de 1971 y se lanzó por primera vez en 1984. Proporciona muchas adiciones al lenguaje, de las cuales la más notable es la compatibilidad con matrices anidadas (no rectangulares). [ 41 ] Todo el equipo de productos y servicios de APL2 recibió el Premio Iverson en 2007. [ 104 ]
En 2021, IBM vendió APL2 a Log-On Software, que desarrolla y vende el producto como Log-On APL2 . [ 105 ]
APLGOL
En 1972, se lanzó APLGOL como una versión experimental de APL que incorporaba construcciones de lenguaje de programación estructurada al marco del lenguaje. Se añadieron nuevas instrucciones para el control entre instrucciones, la ejecución de instrucciones condicionales y la estructuración de instrucciones, así como instrucciones para aclarar la intención del algoritmo. [ 106 ] Fue implementado para Hewlett-Packard en 1977. [ 107 ]
Dyalog APL
Dyalog APL fue lanzado por primera vez por la compañía británica Dyalog Ltd. [ 108 ] en 1983 [ 109 ] y, a partir de 2018Está disponible para las plataformas AIX , Linux (incluida Raspberry Pi ), macOS y Microsoft Windows . Se basa en APL2, con extensiones para admitir la programación orientada a objetos , [ 110 ] la programación funcional [ 111 ] y la programación tácita . [ 112 ] Las licencias son gratuitas para uso personal/no comercial. [ 113 ]
En 1995, dos miembros del equipo de desarrollo —John Scholes y Peter Donnelly— recibieron el Premio Iverson por su trabajo en el intérprete. [ 104 ] Gitte Christensen y Morten Kromberg recibieron conjuntamente el Premio Iverson en 2016. [ 114 ]
NARS2000
NARS2000 es un intérprete APL de código abierto escrito por Bob Smith, un destacado desarrollador e implementador de APL de STSC en las décadas de 1970 y 1980. NARS2000 incluye funciones avanzadas y nuevos tipos de datos, y se ejecuta de forma nativa en Microsoft Windows y otras plataformas mediante Wine . Su nombre proviene de una herramienta de desarrollo de la década de 1980, NARS (Nested Arrays Research System). [ 115 ]
APLX
APLX es un dialecto multiplataforma de APL, basado en APL2 y con varias extensiones, que fue lanzado por primera vez por la compañía británica MicroAPL en 2002. Aunque ya no está en desarrollo ni a la venta comercial, ahora está disponible de forma gratuita a través de Dyalog. [ 116 ]
York APL
York APL [ 117 ] fue desarrollado en la Universidad de York , Ontario, alrededor de 1968, y se ejecutaba en mainframes IBM 360. Una diferencia notable entre este y APL\360 era que definía la "forma" (ρ) de un escalar como 1, mientras que APL\360 la definía como el 0, que es matemáticamente más correcto; esto facilitaba la escritura de funciones que actuaban de la misma manera con escalares y vectores.
GNU APL
GNU APL es una implementación libre de Extended APL, tal como se especifica en ISO/IEC 13751:2001, y por lo tanto es una implementación de APL2. Se ejecuta en Linux , macOS, varios dialectos BSD y en Windows (ya sea usando Cygwin para obtener soporte completo de todas sus funciones del sistema o como un binario nativo de Windows de 64 bits con algunas de sus funciones del sistema faltantes). GNU APL utiliza Unicode internamente y se puede automatizar mediante scripts. Fue escrito por Jürgen Sauermann. [ 118 ]
Richard Stallman , fundador del Proyecto GNU , fue uno de los primeros en adoptar APL, usándolo para escribir un editor de texto cuando era estudiante de secundaria en el verano de 1969. [ 119 ]
Interpretación y compilación de APL
APL es tradicionalmente un lenguaje interpretado , con características como tipado de variables débil que no se adaptan bien a la compilación . [ 120 ] Sin embargo, con arreglos como su estructura de datos principal [ 121 ] ofrece oportunidades para obtener mejoras de rendimiento a través del paralelismo , [ 122 ] computación paralela , [ 123 ] [ 124 ] aplicaciones masivamente paralelas , [ 125 ] [ 126 ] e integración a muy gran escala (VLSI), [ 127 ] [ 128 ] y desde el principio APL ha sido considerado un lenguaje de alto rendimiento [ 129 ] – por ejemplo, se destacó por la velocidad con la que podía realizar operaciones matriciales complejas "porque opera sobre arreglos y realiza operaciones como la inversión de matrices internamente". [ 130 ]
Sin embargo, APL rara vez se interpreta de forma pura, y las técnicas de compilación o compilación parcial que se utilizan o se han utilizado incluyen las siguientes:
Reconocimiento de modismos
La mayoría de los intérpretes de APL admiten el reconocimiento de modismos [ 131 ] y evalúan los modismos comunes como operaciones únicas. [ 132 ] [ 133 ] Por ejemplo, al evaluar el modismo BV/⍳⍴Acomo una operación única (donde BVes un vector booleano y Aes una matriz), se evita la creación de dos matrices intermedias. [ 134 ]
Código de bytes optimizado
El tipado débil en APL significa que un nombre puede hacer referencia a una matriz (de cualquier tipo de dato), una función o un operador. En general, el intérprete no puede saber de antemano qué forma tendrá y, por lo tanto, debe realizar análisis, comprobación de sintaxis, etc., en tiempo de ejecución. [ 135 ] Sin embargo, en ciertas circunstancias, es posible deducir de antemano a qué tipo se espera que haga referencia un nombre y luego generar bytecode que se puede ejecutar con una sobrecarga de tiempo de ejecución reducida. Este bytecode también se puede optimizar utilizando técnicas de compilación como el plegado de constantes o la eliminación de subexpresiones comunes . [ 136 ] El intérprete ejecutará el bytecode cuando esté presente y cuando se cumplan las suposiciones que se hayan hecho. Dyalog APL incluye soporte para bytecode optimizado. [ 136 ]
Compilación
La compilación de APL ha sido objeto de investigación y experimentación desde que el lenguaje estuvo disponible por primera vez; se considera que el primer compilador fue el Burroughs APL-700 [ 137 ] , publicado alrededor de 1971. [ 138 ] Para poder compilar APL, es necesario imponer limitaciones al lenguaje. [ 137 ] [ 139 ] APEX es un compilador de APL para investigación, escrito por Robert Bernecky y disponible bajo la Licencia Pública General de GNU . [ 140 ]
El compilador STSC APL es un híbrido entre un optimizador de código de bytes y un compilador: permite compilar funciones a código máquina siempre que se declaren sus subfunciones y variables globales , pero el intérprete se sigue utilizando como una biblioteca de tiempo de ejecución y para ejecutar funciones que no cumplen con los requisitos de compilación. [ 141 ]
Estándares
APL ha sido estandarizado por el grupo de trabajo X3J10 del Instituto Nacional Estadounidense de Estándares (ANSI) y por la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC), específicamente por el Subcomité 22 del Grupo de Trabajo 3 del Comité Técnico Conjunto 1 de ISO/IEC. El lenguaje APL básico se especifica en la norma ISO 8485:1989, y el lenguaje APL extendido se especifica en la norma ISO/IEC 13751:2001.
Véase también
Referencias
- 1 2 "Citas y anécdotas de APL" . jsoftware.com . Consultado el 14 de abril de 2018 .
- ↑ "std::iota" . cppreference.com .
- 1 2 3 Kenneth E. Iverson (1962). Un lenguaje de programación (PDF) . Wiley . ISBN 978-0-471-43014-8. LCCN 62015180 . OL 26792153M . Wikidata Q133329895 . Consultado el 6 de agosto de 2023 .
{{cite book}}: Incompatibilidad de ISBN/Fecha ( ayuda ) - ↑ McIntyre, Donald B. (1991). "El lenguaje como herramienta intelectual: de los jeroglíficos al APL" . IBM Systems Journal . 30 (4): 554– 581. doi : 10.1147/sj.304.0554 . Archivado del original el 4 de marzo de 2016. Recuperado el 9 de enero de 2015 .
- ↑ "Mención del Premio ACM – John Backus" . Awards.acm.org. 1977. Archivado del original el 12 de febrero de 2008. Consultado el 3 de febrero de 2010 .
- 1 2 Moler, Cleve. "El crecimiento de MATLAB" (PDF) . Archivado del original (PDF) el 11 de abril de 2009. Recuperado el 3 de febrero de 2010 .
- 1 2 Hui, Roger. "Una bibliografía de APL y J" . jsoftware.com/jwiki . Consultado el 2 de marzo de 2010 .
- 1 2 "Una entrevista con Arthur Whitney" . Kx Systems. 4 de enero de 2004. Archivado del original el 4 de abril de 2009. Recuperado el 2 de marzo de 2010 .
- ↑ Iverson, Kenneth E., "Procesamiento automático de datos: Capítulo 6: Un lenguaje de programación" Archivado el 4 de junio de 2009 en Wayback Machine , 1960, Borrador del libro de Brooks e Iverson de 1963, Procesamiento automático de datos .
- ↑ Brooks, Fred ; Iverson, Kenneth, (1963), Procesamiento automático de datos , John Wiley & Sons Inc.
- ↑ "Mención del Premio Turing 1979" . Awards.acm.org. Archivado del original el 23 de diciembre de 2009. Consultado el 3 de febrero de 2010 .
- ↑ Hellerman, H. (julio de 1964). "Sistema traductor de matriz personalizado experimental" . Communications of the ACM . 7 (7): 433– 438. doi : 10.1145/364520.364573 . S2CID 2181070 .
- ↑ Falkoff, Adin D. ; Iverson, Kenneth E. (agosto de 1978). "La evolución de APL" . ACM SIGPLAN Notices . 13 (8): 47– 57. doi : 10.1145/960118.808372 .
- ↑ Abrams, Philip S., Un intérprete para la "notación Iverson" , Informe técnico: CS-TR-66-47, Departamento de Ciencias de la Computación, Universidad de Stanford, agosto de 1966;
- ↑ Haigh, Thomas (2005). "Biografías: Kenneth E. Iverson". IEEE Annals of the History of Computing . doi : 10.1109/MAHC.2005.4 .
- 1 2 Breed, Larry, "La primera sesión de terminal de APL" , APL Quote Quad , Association for Computing Machinery, Volumen 22, Número 1, septiembre de 1991, pág. 2–4.
- ↑ 19, 2009 Adin Falkoff – Museo de Historia de la Computación. "Iverson le atribuyó la elección del nombre APL y la introducción de la máquina de escribir IBM con forma de bola de golf y el cabezal de impresión de repuesto, que proporcionó el famoso conjunto de caracteres para representar los programas."
- ↑ Productos Tektronix 1973 (PDF) . pág. 276. Consultado el 18 de marzo de 2026 .
- ↑ Terminal de visualización de computadora Tektronix 4013 (PDF) . págs. 3-5 . Consultado el 18 de marzo de 2026 .
- 1 2 Breed, Larry (agosto de 2006). "Cómo llegamos a APL\1130" . Vector (Asociación Británica de APL) . 22 (3). ISSN 0955-1433 . Archivado del original el 12 de mayo de 2008. Recuperado el 2 de abril de 2007 .
- ↑ Manual APL\1130 archivado el 21/02/2011 en Wayback Machine , mayo de 1969
- ↑ "Recordando a APL" . Quadibloc.com . Consultado el 17 de junio de 2013 .
- ↑ Falkoff, Adin; Iverson, Kenneth E., "Guía del usuario de APL\360" Archivado el 29 de febrero de 2012 en Wayback Machine , IBM Research, Thomas J. Watson Research Center, Yorktown Heights, NY, agosto de 1968.
- ↑ "APL\360 Terminal System" Archivado el 11 de julio de 2010 en Wayback Machine , IBM Research, Thomas J. Watson Research Center, marzo de 1967.
- 1 2 Pakin, Sandra (1968). Manual de referencia APL\360 . Science Research Associates, Inc. ISBN 978-0-574-16135-2.
- ↑ Falkoff, Adin D.; Iverson, Kenneth E., El diseño de APL , IBM Journal of Research and Development , Volumen 17, Número 4, julio de 1973. "Estas funciones definidas por el entorno se basaban en el uso de otra clase de funciones —denominadas «vigas I» debido a la forma del símbolo utilizado para ellas— que proporcionan una facilidad más general para la comunicación entre los programas APL y las partes menos abstractas del sistema. Las funciones de viga I fueron introducidas inicialmente por los programadores del sistema para permitirles ejecutar instrucciones de System/360 desde dentro de los programas APL y, por lo tanto, utilizar APL como una ayuda directa en su actividad de programación. La evidente conveniencia de funciones de este tipo, que parecían formar parte del lenguaje, llevó a la introducción de la función de viga I monádica para su uso directo por cualquier persona. Diversos argumentos de esta función proporcionaban información sobre el entorno, como el espacio disponible y la hora del día."
- ↑ Minker, Jack (enero de 2004). "2.3.4 Desarrollos de software informático en el CSC, 1962–1973". Inicios de la informática y las ciencias de la computación en la Universidad de Maryland (PDF) (Informe). Universidad de Maryland. pág. 38. Archivado del original (PDF) el 10 de junio de 2011. Recuperado el 23 de mayo de 2011 .
- ↑ Stebbens, Alan. "Cómo empezó todo" . Archivado del original el 4 de marzo de 2016. Consultado el 22 de mayo de 2011 .
- ↑ "Manual de referencia del lenguaje y las operaciones de Xerox APL" (PDF) . Archivado del original el 12 de abril de 2026. Consultado el 17 de marzo de 2026 .
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ "SIGAPL" . Sigapl.org . Consultado el 17 de junio de 2013 .
- ↑ "Cincuenta años de BASIC, el lenguaje de programación que personalizó las computadoras" . Time . 29 de abril de 2014. Archivado del original el 2 de junio de 2023. Consultado el 29 de abril de 2018 .
- ↑ "MCM Computers M70/M700" . old-computers.com . Archivado del original el 3 de abril de 2018. Consultado el 8 de abril de 2018 .
- ↑ Stachniak, Stachniak (2011). Inventando la PC: La historia de MCM/70 . McGill Queens's University Press. ISBN 978-0-7735-3852-8.
- ↑ Miller, Michael (17 de diciembre de 2014). "PC que allanaron el camino para el Altair" . PC Magazine . Ziff Davis . Recuperado el 29 de abril de 2018 .
- ↑ "VideoBrain Family Computer" , Popular Science , noviembre de 1978, anuncio.
- ↑ "Una mirada a SuperPet" . Compute! . Small System Services Inc. Diciembre de 1981. Consultado el 29 de abril de 2018 .
- ↑ Gates, Bill (31 de enero de 1976). "Una carta abierta a los aficionados" . Boletín del Homebrew Computer Club . Archivado del original el 22 de diciembre de 2019. Recuperado el 29 de abril de 2018 .
- ↑ Hui, Roger. "Recordando a Ken Iverson" . keiapl.org . KEIAPL . Consultado el 10 de enero de 2015 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Kenneth E. Iverson" . Premio ACM AM Turing . ACM . Consultado el 10 de enero de 2015 .
- ↑ "APL2: Los primeros años: ¿Se puede y se debe llegar a un acuerdo en cuestiones técnicas?" . Capítulo SIGPLAN sobre lenguajes de programación de matrices . ACM . Consultado el 10 de enero de 2015 .
- 1 2 3 4 Falkoff, Adin D. (1991). "La familia de sistemas APL de IBM". IBM Systems Journal . 30 (4): 416– 432. doi : 10.1147/sj.304.0416 . S2CID 19030940 .
- ↑ "IBM APL2" . EDM2 . 09/10/2019. Archivado del original el 17/11/2021 . Consultado el 17/11/2021 .
- ↑ "APL2: Novedades" . ibm.com . IBM . Consultado el 22 de abril de 2018 .
- ↑ Micro APL. "Descripción general del sistema APL" . microapl.com . Micro APL . Consultado el 10 de enero de 2015 .
- ↑ Robertson, Graeme. "Una visión personal de APL2010" . archive.vector.org.uk . Vector – Revista de la Asociación Británica de APL. Archivado del original el 2 de abril de 2015. Consultado el 10 de enero de 2015 .
- ↑ Rodríguez, P.; Rojas, J.; Alfonseca, M.; Burgos, JI (1989). "Un sistema experto en síntesis química escrito en APL2/PC". ACM SIGAPL APL Quote Quad . 19 (4): 299– 303. doi : 10.1145/75144.75185 . S2CID 16876053 .
- ↑ "APL2: Un lenguaje de programación para la resolución de problemas, visualización y acceso a bases de datos" . www-03.ibm.com . IBM. Archivado del original el 22 de noviembre de 2013. Consultado el 10 de enero de 2015 .
- ↑ Pike, Rob (25-03-2018). "Ivy" . GoDoc . Archivado del original el 13-08-2019.
- ↑ "Preguntas frecuentes sobre el lenguaje Wolfram" . Wolfram . Consultado el 20 de febrero de 2020.
LISP y APL fueron dos influencias tempranas.
- ↑ Texas Instruments (1977). "Anuncio de página completa de TI 745: Presentando un nuevo conjunto de caracteres" . Computerworld . 11 (27): 32. Recuperado el 20 de enero de 2015 .
- 1 2 "Fuentes y teclados APL" . Dyalog, Ltd. 2004–2024 . Consultado el 1 de noviembre de 2024 .
- ↑ Smith, Bob. "Teclado NARS2000" . www.sudleyplace.com . Bob Smith; NARS2000 . Consultado el 19 de enero de 2015 .
- ↑ "Introducción a APL – Símbolos de APL" . www.microapl.co.uk . MicroAPL Ltd. Consultado el 8 de enero de 2015 .
- ↑ Brown, James A.; Hawks, Brent; Trimble, Ray (1993). "Extending the APL character set". ACM SIGAPL APL Quote Quad . 24 (1): 41– 46. doi : 10.1145/166198.166203 .
- ↑ Kromberg, Morten. "Soporte Unicode para APL" . archive.vector.org.uk . Vector, Revista de la Asociación Británica de APL. Archivado del original el 20 de enero de 2015. Consultado el 8 de enero de 2015 .
- ↑ Hsu, Aaron. "Divulgación y educación en ciencias de la computación con APL" . Dyalog, Ltd. Archivado del original el 17 de agosto de 2016. Recuperado el 15 de julio de 2016 .
- 1 2 MicroAPL. "Operadores" . www.microapl.co.uk . MicroAPL . Consultado el 12 de enero de 2015 .
- ↑ Funciones primitivas. "Funciones primitivas" . www.microapl.co.uk/ . Consultado el 1 de enero de 2015 .
- ↑ Espacio de trabajo. "El espacio de trabajo" . www.microapl.co.uk . Consultado el 1 de enero de 2015 .
- ↑ "ejemplo" . Catpad.net. Archivado del original el 8 de julio de 2013. Recuperado el 17 de junio de 2013 .
- ↑ "Introducción de símbolos APL" . www.microapl.co.uk . Consultado el 1 de enero de 2015 .
- ↑ Dickey, Lee (1993). "Lista de esquemas de transliteración APL" . Archivado del original el 29 de septiembre de 2006.
- ↑ Iverson, KE (agosto de 1980). «La notación como herramienta de pensamiento» . Communications of the ACM . 23 (8): 444– 465. doi : 10.1145/358896.358899 . Archivado del original el 20 de septiembre de 2013.
- ↑ Batenburg. "Eficiencia APL" . www.ekevanbatenburg.nl . Consultado el 1 de enero de 2015 .
- ↑ Vaxman. "APL Great Programming" (PDF) . www.vaxman.de . Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 1 de enero de 2015 .
- ↑ Janko, Wolfgang (mayo de 1987). "Investigación sobre la eficiencia del uso de APL para la programación de una máquina de inferencia". ACM SIGAPL APL Quote Quad . 17 (4): 450– 456. doi : 10.1145/384282.28372 .
- ↑ Borealis. "¿Por qué APL?" . www.aplborealis.com . Consultado el 1 de enero de 2015 .
- ↑ Iverson, Kenneth E. (1987). "Un diccionario de APL" . www.jsoftware.com . Consultado el 20 de enero de 2015 .
- 1 2 3 4 5 6 "Conceptos de APL" . Microapl.co.uk . Consultado el 3 de febrero de 2010 .
- ↑ "Teoría de matrices anidadas" . Nial.com. Archivado del original el 9 de julio de 2011. Consultado el 3 de febrero de 2010 .
- 1 2 3 "Programmera i APL", Bohman, Fröberg, Studentlitteratur , ISBN 91-44-13162-3
- ↑ Iverson, Kenneth E. (1983). "Sintaxis y semántica de APL" . www.jsoftware.com . IP Sharp Associates . Recuperado el 11 de enero de 2015 .
- ↑ MicroAPL. "Primitivas de APL" . www.microapl.co.uk . MicroAPL . Consultado el 11 de enero de 2015 .
- ↑ "Fuente APL – Glifos APL adicionales" . wiki.nars2000.org . NARS2000 . Consultado el 11 de enero de 2015 .
- ↑ Fox, Ralph L. "Números aleatorios sistemáticos" . www.sigapl.org . SIGAPL . Consultado el 11 de enero de 2015 .
- ↑ Scholes, John (26 de enero de 2009). El juego de la vida de Conway en APL (video). YouTube . Recuperado el 20 de noviembre de 2021 .
- ↑ Para obtener más detalles técnicos, consulte el artículo "El juego de la vida de Conway" en la wiki de APL . Consultado el 20 de noviembre de 2021.
- ↑ McDonnell, EE. Introducción a A Source Book in APL , APL Press, 1981. ( Escaneo completo del libro )
- ↑ Acharya, R; Pereira, (904567457) NE APL Programming Language Archived 2021-11-03 at the Wayback Machine . Paper for CS5314 (Concepts of Programming Languages) at Virginia Tech.
- ↑ Wiki de APL. Conferencia de APL . Consultado el 13 de octubre de 2021.
- ↑ Jacob Williams. Degenerate Conic: New Blood . Consultado el 13 de octubre de 2021.
- ↑ Wiki de APL. Logotipo de APL . Consultado el 20 de mayo de 2022.
- 1 2 "Informe anual 2017" (PDF) . SimCorp. 1 de febrero de 2018. Archivado (PDF) del original el 9 de octubre de 2022. Recuperado el 3 de abril de 2018. Sofia
es una plataforma de gestión de inversiones integral como SimCorp Dimension.
... Sofia se basa en el lenguaje de programación APL, al igual que algunas partes de SimCorp Dimension.
- ↑ Lee, Georges; Lelouche, Ruddy; Meissonnier, Vincent; Zarri, Gian Piero (1 de septiembre de 1982). "Uso de APL en un entorno de inteligencia artificial" . ACM SIGAPL APL Quote Quad . 13 (1): 183– 191. doi : 10.1145/390006.802242 . Recuperado el 3 de abril de 2018 .
- ↑ Fordyce, K.; Sullivan, G. (1985). "Artificial Intelligence Development Aids" . APL Quote Quad . APL 85 Conf. Proc. (15): 106–113 . doi : 10.1145/255315.255347 .
- ↑ Alfonseca, Manuel (julio de 1990). "Redes neuronales en APL" . ACM SIGAPL APL Quote Quad . 20 (4): 2– 6. doi : 10.1145/97811.97816 . Recuperado el 3 de abril de 2018 .
- ^ Kromberg, Morten. «Programación de robots en APL» . www.dyalog.com/ . Consultado el 6 de enero de 2015 .
- ↑ Holmes, WN (mayo de 1978). "¿Es APL un lenguaje de programación?" . The Computer Journal . 21 (2): 128– 131. doi : 10.1093/comjnl/21.2.128 .
- ↑ Hsu, Aaron (18 de noviembre de 2017). "Patrones de diseño vs. antipatrones en APL" . functionalconf.com . Archivado del original el 23 de marzo de 2018. Consultado el 7 de abril de 2018 .
- ↑ Magnenat-Thalmann, Nadia; Thalmann, Daniel (1985). Teoría y práctica de la animación por ordenador . Springer-Verlag . pag. 38.ISBN 9784431684336Recuperado el 3 de abril de 2018.
Digital Effects
es otra productora que trabajó en Tron .Utilizaron un sistema de escaneo láser para digitalizar, almacenar y reproducir imágenes. Judson Rosebush, presidente de Digital Effects, es el diseñador principal de APL VISION y FORTRAN VISION, dos paquetes de animación por computadora que se utilizan actualmente.
- ↑ Gutsell, Sam (17 de octubre de 2017). "Stormwind Simulator en Dyalog '16" . www.optima-systems.co.uk . Optima Systems . Consultado el 3 de abril de 2018. Stormwind
es un [simulador de navegación 3D] que ha generado un gran interés en la comunidad APL.
- ↑ "OP-Pohjola ja Tieto hoitivat sovelluksen muutostyöt sujuvalla yhteistyöllä" [La cooperación fluida entre OP-Pohjola y Tieto permitió la modificación de la aplicación ] (PDF) . www.tieto.com (en finlandés). Tieto . Archivado desde el original (PDF) el 9 de octubre de 2022 . Consultado el 3 de abril de 2018 .
- ↑ "Vi idag" [ Nosotros hoy ] . profdoccare.se (en sueco). Archivado del original el 7 de abril de 2018. Recuperado el 3 de abril de 2018. Mediante
la elección de APL como plataforma técnica, es relativamente fácil construir rápidamente una solución que puede llamarse prototipo ejecutable (traducido del original).
- ↑ Brenner, Charles. "Tecnología de identificación de ADN y APL" . dna-view.com . Presentación en la Conferencia de Usuarios de APL de 2005. Consultado el 9 de enero de 2015 .
- ↑ Brenner, Charles (17 de octubre de 2014). "Hay ADN por todas partes: una oportunidad para la LMA" . www.youtube.com . YouTube. Archivado del original el 14 de noviembre de 2021. Recuperado el 9 de enero de 2015 .
- ↑ "Premios – 1973 – Lawrence Breed" . Asociación para la Maquinaria Informática. Archivado del original el 2 de abril de 2012.
- ↑ "Premios – 1973 – Richard Lathwell" . Asociación para la Maquinaria Informática. Archivado del original el 2 de abril de 2012.
- ↑ "Premios – 1973 – Roger Moore" . Asociación para la Maquinaria Informática. Archivado del original el 2 de abril de 2012.
- ↑ "IBM 5100" . old-computers.com . Archivado del original el 30 de abril de 2018. Consultado el 8 de abril de 2018 .
- ↑ "Bienvenido, IBM, a la informática personal" . Byte . Diciembre de 1975. pág. 90. Consultado el 29 de abril de 2018 .
- ↑ "Cronología de APL y su influencia en el desarrollo de lenguajes informáticos" . www.sigapl.org . ACM . Consultado el 29 de abril de 2018 .
- ↑ Roger Moore (2005). "Historia del tiempo compartido y la red de IP Sharp Associates" . Rogerdmoore.ca . Roger Moore. Archivado del original el 4 de abril de 2019. Recuperado el 7 de marzo de 2018 .
- ↑ Blumenthal, Marcia (18 de mayo de 1981). "VAX-11s adquieren procesador APL" . Computerworld . Consultado el 22 de abril de 2018 .
- 1 2 3 "Premio Kenneth E. Iverson a la Contribución Sobresaliente a APL" . Capítulo SIGPLAN sobre Lenguajes de Programación de Matrices (SIGAPL). Archivado del original el 26 de febrero de 2012.
- ↑ Mark Schora (26 de enero de 2021). "Log-On Software anuncia Log-On APL2" . Log-On Software . Archivado del original el 17 de noviembre de 2021. Consultado el 17 de noviembre de 2021 .
- ↑ Kelley, RA (1973). "APLGOL, un lenguaje de programación estructurado experimental" . IBM Journal of Research and Development . 17 : 69–73 . doi : 10.1147/rd.171.0069 .
- ↑ Johnston, Ronald L. (julio de 1977). "APLGOL: Herramientas de programación estructurada para APL" . Hewlett-Packard Journal.
- ↑ "Sitio web de Dyalog Ltd" . Consultado el 6 de junio de 2018 .
- ↑ "Dyalog a los 25" (PDF) . Vector Magazine . British APL Association. Septiembre de 2008. Consultado el 14 de abril de 2018 .
- ^ Kromberg, Morten (22 de octubre de 2007). "Matrices de objetos" (PDF) . Actas del simposio de 2007 sobre lenguajes dinámicos . pag. 20.doi : 10.1145 / 1297081.1297087 . ISBN 9781595938688. S2CID 18484472 . Archivado (PDF) del original el 09-10-2022 . Recuperado el 27 de agosto de 2018 .
- ↑ Scholes, John. "D: Un subconjunto funcional de Dyalog APL" . Asociación Británica de APL.
- ↑ Scholes, John. "Traducción de funciones D a forma tácita" . Dyalog Ltd.
- ↑ "Dyalog – Precios y licencias" .
- ↑ "El premio Iverson 2016 reconoce al CEO y al CXO de Dyalog" . Consultado el 6 de junio de 2018 .
- ↑ "Sistema de investigación de matrices anidadas – NARS2000: un intérprete experimental de APL" . NARS2000 . Sudley Place Software . Consultado el 10 de julio de 2015 .
- ↑ "APLX ha sido retirado de la venta comercial, pero puede descargarse gratuitamente" . Microapl.com . Consultado el 14 de abril de 2018 .
- ↑ "York APL" (PDF) .
- ↑ "GNU APL" . directory.fsf.org . Directorio de software libre . Consultado el 28 de septiembre de 2013 .
- ↑ Stallman, Richard M. "RMS Berättar" . Archivado del original el 26 de noviembre de 2018. Recuperado el 22 de abril de 2018 .
- ↑ Budd, Timothy (1988). Un compilador APL . Springer-Verlag. ISBN 978-0-387-96643-4.
- ↑ "¿Qué es APL?" . www.sigapl.org . SIGAPL . Consultado el 20 de enero de 2015 .
- ↑ Ju, Dz-Ching; Ching, Wai-Mee (1991). "Explotación del paralelismo de datos APL en una máquina MIMD de memoria compartida". Actas del tercer simposio ACM SIGPLAN sobre Principios y práctica de la programación paralela . Vol. 26. págs. 61–72 . doi : 10.1145/109625.109633 . ISBN 0-89791-390-6. S2CID 8584353 .
- ↑ Hsu, Aaron W.; Bowman, William J. "Revisitando APL en la era moderna" (PDF) . www.cs.princeton.edu . Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 20 de enero de 2015 .
- ↑ Ching, W.-M.; Ju, D. (1991). "Ejecución de programas APL paralelizados automáticamente en RP3" . IBM Journal of Research & Development . 35 (5/6): 767–777 . doi : 10.1147/rd.355.0767 . Archivado del original el 3 de marzo de 2016. Recuperado el 20 de enero de 2015 .
- ↑ Blelloch, Guy E.; Sabot, Gary W. (1990). "Compiling Collection-Oriented Languages onto Massively Parallel Computers". Journal of Parallel and Distributed Computing . 8 (2): 119– 134. CiteSeerX 10.1.1.51.5088 . doi : 10.1016/0743-7315(90)90087-6 .
Los lenguajes orientados a colecciones incluyen APL, APL2
- ↑ Jendrsczok, Johannes; Hoffmann, Rolf; Ediger, Patrick; Keller, Jörg. "Implementación de funciones paralelas de datos tipo APL en una máquina GCA" (PDF) . www.fernuni-hagen.de . págs. 1–6 . Archivado del original (PDF) el 22 de enero de 2015. Recuperado el 22 de enero de 2015. GCA – Automatización Celular Global .
Intrínsecamente masivamente paralelo. 'Se ha elegido APL por su capacidad para expresar estructuras de matriz y vector'.
- ↑ Brenner, Norman (1984). "Diseño de circuitos VLSI usando APL con subrutinas Fortran". Actas de la conferencia internacional sobre APL - APL '84 . Vol. 14. pp. 77–79 . doi : 10.1145/800058.801079 . ISBN 0-89791-137-7. S2CID 30863491 .
APL para interactividad y facilidad de codificación
• Brenner, Norman (1984). "Diseño de circuitos VLSI usando APL con subrutinas Fortran". Actas de la conferencia internacional sobre APL – APL '84 . ACM SIGAPL. ISBN 978-0897911375. - ↑ Gamble, DJ; Hobson, RF (1989). "Hacia un entorno gráfico/procedimental para la construcción de generadores de módulos VLSI". Actas de la Conferencia IEEE Pacific Rim sobre Comunicaciones, Computadoras y Procesamiento de Señales . págs. 606–611 . doi : 10.1109/PACRIM.1989.48437 . S2CID 7921438.
Se describen los generadores de módulos VLSI. APL y C, como ejemplos de lenguajes interpretados y compilados, pueden conectarse a una pantalla gráfica avanzada.
- ↑ Lee, Robert S. (1983). "Dos implementaciones de APL" . PC Magazine . 2 (5): 379. Recuperado el 20 de enero de 2015 .
- ↑ "El lenguaje de programación APL" . MARTHA y LLAMA . Archivado del original el 13 de febrero de 2015. Consultado el 20 de enero de 2015 .
- ↑ Metzger, Robert; Wen, Zhaofang (2000). Reconocimiento y reemplazo automático de algoritmos: un nuevo enfoque para la optimización de programas . The MIT Press. ISBN 9780262133685. Consultado el 6 de mayo de 2018 .
- ↑ Snyder, Lawrence (1982). "Reconocimiento y selección de modismos para la optimización de código". Acta Informatica . 17 (3). doi : 10.1007/BF00264357 . S2CID 8369972 .
- ↑ Cheng, Feng Sheng (1981). Coincidencia de modismos: una técnica de optimización para un compilador APL (Tesis). Universidad Estatal de Iowa . Recuperado el 6 de mayo de 2018 .
- ↑ "Reconocimiento de modismos" . dyalog.com . Consultado el 6 de mayo de 2018 .
- ↑ Strawn, George O. (marzo de 1977). "¿Realmente necesita APL un análisis sintáctico en tiempo de ejecución?". Software: Practice and Experience . 7 (2): 193– 200. doi : 10.1002/spe.4380070207 . S2CID 1463012 .
- 1 2 "Guía del usuario del compilador" (PDF) . www.dyalog.com . Dyalog Ltd. Archivado (PDF) del original el 09/10/2022 . Recuperado el 7 de mayo de 2018 .
- 1 2 Driscoll, Graham C. Jr.; Orth, Donald L. (noviembre de 1986). "Compilación de APL: El traductor APL de Yorktown". IBM Journal of Research and Development . 30 (6): 583– 593. doi : 10.1147/rd.306.0583 . S2CID 2299699 .
- ↑ "Cronología de la LPA" . www.sigapl.org . ACM . Consultado el 7 de mayo de 2018 .
- ↑ Wai-Mee, Ching (noviembre de 1986). "Análisis de programas y generación de código en un compilador APL/370". IBM Journal of Research and Development . 30 (6): 594– 602. doi : 10.1147/rd.306.0594 . S2CID 17306407 .
- ↑ "El Proyecto APEX" .
- ↑ "Compilador APL (mensaje de Jim Weigang al grupo de noticias comp.lang.apl)" . 5 de abril de 1994.
Lecturas adicionales
- Una máquina APL archivada el 27/01/2024 en la Wayback Machine (tesis doctoral de 1970 de Philip Abrams, Stanford).
- Una historia personal de APL archivada el 7 de noviembre de 2023 en Wayback Machine (artículo de 1982 de Michael S. Montalbano )
- McIntyre, Donald B. (1991). «El lenguaje como herramienta intelectual: De los jeroglíficos al APL» (PDF) . IBM Systems Journal . 30 (4): 554– 581. doi : 10.1147/sj.304.0554 . Archivado del original (PDF) el 4 de mayo de 2006.
- Iverson, Kenneth E. (1991). "Una visión personal de APL" (PDF) . IBM Systems Journal . 30 (4): 582– 593. doi : 10.1147/sj.304.0582 . Archivado del original (PDF) el 27 de febrero de 2008.
- Un lenguaje de programación, por Kenneth E. Iverson
- APL en la exposición de Kenneth E. Iverson
- Brooks, Frederick P.; Kenneth Iverson (1965). Procesamiento automático de datos, edición System/360 . ISBN 0-471-10605-4.
- Askoolum, Ajay (agosto de 2006). Creación de sistemas con APL + Win . Wiley. ISBN 978-0-470-03020-2.
- Falkoff, Adin D.; Iverson, Kenneth E .; Sussenguth, Edward H. (1964). "Una descripción formal del sistema/360" (PDF) . IBM Systems Journal . 3 (2): 198–261 . doi : 10.1147/sj.32.0198 . Archivado del original (PDF) el 27 de febrero de 2008.
- Wexelblat, Richard L., ed. (1981). «XIV». Historia de los lenguajes de programación: Actas de la Conferencia sobre la Historia de los Lenguajes de Programación, Los Ángeles, California, 1-3 de junio de 1978. Academic Press. ISBN 978-0127450407.
- Banon, Gerald Jean Francis (1989). Bases de la Computación Gráfica . Río de Janeiro: Campus. pag. 141.
- LePage, Wilbur R. (1978). Programación APL aplicada . Prentice Hall.
- Mougin, Philippe; Ducasse, Stephane (noviembre de 2003). "OOPAL: Integración de la programación de matrices en la programación orientada a objetos" (PDF) . ACM SIGPLAN Notices . 38 (11): 65–77 . doi : 10.1145/949343.949312 . Archivado del original (PDF) el 14 de noviembre de 2006.
- Introducción a la programación orientada a objetos para programadores de APL (PDF) . Dyalog Limited. Septiembre de 2006. Archivado del original (PDF) el 4 de octubre de 2007.
- Shustek, Len (10 de octubre de 2012). "El código fuente del lenguaje de programación APL" . Museo de Historia de la Computación (CHM). Archivado del original el 6 de septiembre de 2017. Recuperado el 6 de septiembre de 2017 .
- Svoboda, Antonín ; White, Donnamaie E. (2016) [2012, 1985, 1979-08-01]. Técnicas avanzadas de diseño de circuitos lógicos (PDF) (edición electrónica reimpresa ). Garland STPM Press (edición original) / WhitePubs Enterprises, Inc. (reedición). ISBN 978-0-8240-7014-4LCCN 78-31384 . Archivado (PDF) del original el 14 de abril de 2017. Consultado el 15 de abril de 2017 .
Video
- Los orígenes de APL en YouTube : una entrevista de 1974 al estilo de un programa de entrevistas con los desarrolladores originales de APL.
- Demostración de APL en YouTube : una demostración en vivo de APL realizada en 1975 por el profesor Bob Spence , del Imperial College de Londres.
- El juego de la vida de Conway en APL en YouTube : un tutorial de 2009 de John Scholes de Dyalog Ltd., que implementa el juego de la vida de Conway en una sola línea de APL.
- 50 años de APL en YouTube : una introducción a APL de 2009 por Graeme Robertson.
Enlaces externos
- TryAPL.org , una guía introductoria en línea sobre la leucemia promielocítica aguda (LPA).
- APL2C , enlaces a compiladores APL
- Lenguajes de programación .NET
- Familia de lenguajes de programación APL
- lenguajes de programación de matrices
- shells de comandos
- Lenguajes de programación dinámicos
- Lenguajes de programación de tipado dinámico
- Lenguajes funcionales
- Software de IBM
- Lenguajes de programación creados en 1964
- Lenguajes de programación con un estándar ISO
- Lenguajes de programación
- lenguajes de programación homoicónicos