Articulo de referencia

Sintaxis y símbolos de APL

El lenguaje de programación APL se distingue por ser simbólico en lugar de léxico : sus primitivas se denotan mediante símbolos , no palabras. Estos símbolos se idearon original...

El lenguaje de programación APL se distingue por ser simbólico en lugar de léxico : sus primitivas se denotan mediante símbolos , no palabras. Estos símbolos se idearon originalmente como una notación matemática para describir algoritmos. [ 1 ] Los programadores de APL suelen asignar nombres informales al hablar de funciones y operadores (por ejemplo, "producto" para ×/), pero las funciones y operadores principales que proporciona el lenguaje se denotan mediante símbolos no textuales.

Funciones monádicas y diádicas

La mayoría de los símbolos representan funciones u operadores . Una función monádica toma como argumento el resultado de evaluar todo lo que se encuentra a su derecha (moderado, como es habitual, por paréntesis). Una función diádica tiene otro argumento: el primer dato a su izquierda. Muchos símbolos representan funciones monádicas y diádicas, interpretadas según su uso. Por ejemplo, ⌊3.2 da como resultado 3, el mayor entero que no supera el argumento, y 3⌊2 da como resultado 2, el menor de los dos argumentos.

Funciones y operadores

APL utiliza el término operador en el sentido de Heaviside como moderador de una función, a diferencia de otros lenguajes de programación que usan el mismo término como algo que opera sobre datos (véase operador relacional y operadores en general) . Otros lenguajes de programación también usan a veces este término indistintamente con función ; sin embargo, en APL ambos términos se usan con mayor precisión. [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] Las primeras definiciones de los símbolos de APL eran muy específicas sobre cómo se categorizaban los símbolos. [ 7 ] Por ejemplo, el operador reduce se denota con una barra inclinada y reduce una matriz a lo largo de un eje interponiendo su operando de función . Un ejemplo de reduce :

En el caso anterior, el operador de reducción o barra inclinada modera la función de multiplicación . La expresión ×/2 3 4 se evalúa como un resultado escalar (de un solo elemento) al reducir un array mediante la multiplicación. El caso anterior se simplifica: imagine multiplicar (sumar, restar o dividir) más de unos pocos números. (A partir de un vector, ×/ devuelve el producto de todos sus elementos).


Los ejemplos de funciones diádicas anteriores [ejemplos de la izquierda y de la derecha] (usando el mismo símbolo / , ejemplo de la derecha) demuestran cómo se pueden usar valores booleanos (0 y 1) como argumentos izquierdos para las funciones \ expand y / replicate para producir resultados exactamente opuestos. En el lado izquierdo, el vector de 2 elementos {45 67} se expande donde aparecen 0 booleanos para dar como resultado un vector de 3 elementos {45 0 67}; observe cómo APL insertó un 0 en el vector. Por el contrario, ocurre exactamente lo opuesto en el lado derecho: donde un vector de 3 elementos se convierte en solo 2 elementos; los 0 booleanos eliminan elementos usando la función de barra diádica / . Los símbolos de APL también operan en listas (vectores) de elementos usando tipos de datos distintos de los numéricos; por ejemplo, un vector de 2 elementos de cadenas de caracteres {"Apples" "Oranges"} podría sustituir al vector numérico {45 67} anterior.

Reglas de sintaxis

En APL, la jerarquía de precedencia para funciones u operadores es estrictamente posicional: las expresiones se evalúan de derecha a izquierda. APL no sigue la precedencia de operadores habitual de otros lenguajes de programación; por ejemplo, ×no vincula sus operandos de forma más "estrecha" que +. En lugar de precedencia de operadores, APL define una noción de ámbito .

El ámbito de una función determina sus argumentos . Las funciones tienen un ámbito derecho largo : es decir, toman como argumentos derechos todo lo que está a su derecha. Una función diádica tiene un ámbito izquierdo corto : toma como argumentos izquierdos el primer dato a su izquierda. Por ejemplo, (la columna de la izquierda a continuación es el código real del programa de una sesión de usuario de APL , con sangría = entrada real del usuario , sin sangría = resultado devuelto por el intérprete de APL ):


Un operador puede tener operandos de función o de datos y evaluarse como una función diádica o monádica. Los operadores tienen un ámbito izquierdo largo. Un operador toma como operando izquierdo la función más larga a su izquierda. Por ejemplo:

El operando izquierdo para el operador over-each¨ es la función índice ⍳ . La función derivada⍳¨ se usa monádicamente y toma como su operando derecho el vector 3 3. El ámbito izquierdo de each termina con el operador reduce , denotado por la barra inclinada hacia adelante . Su operando izquierdo es la expresión de función a su izquierda: el producto exterior de la función equals . El resultado de ∘.=/ es una función monádica. Con el ámbito derecho largo habitual de una función, toma como su argumento derecho el resultado de ⍳¨3 3. Por lo tanto



Funciones monádicas

Funciones diádicas

Operadores e indicador de eje

Notas: Los operadores reduce y scan esperan una función diádica a su izquierda, formando una función compuesta monádica aplicada al vector a su derecha.

El operador de producto "." espera una función diádica tanto a su izquierda como a su derecha, formando una función compuesta diádica aplicada a los vectores a su izquierda y derecha. Si la función a la izquierda del punto es "∘" (que significa nulo), la función compuesta es un producto exterior; de lo contrario, es un producto interior. Un producto interior destinado a la multiplicación de matrices convencional utiliza las funciones + y ×; al reemplazarlas por otras funciones diádicas, se pueden obtener operaciones alternativas útiles.

Algunas funciones pueden ir seguidas de un indicador de eje entre corchetes (o corchetes), es decir, este aparece entre una función y una matriz y no debe confundirse con los subíndices de matriz que se escriben después de la misma. Por ejemplo, dada la función ⌽ (inversión) y una matriz bidimensional, la función opera por defecto a lo largo del último eje, pero esto puede cambiarse utilizando un indicador de eje:


Como caso particular, si la función de concatenación diádica "," va seguida de un indicador de eje (o modificador de eje para un símbolo/función), se puede utilizar para laminar (interponer) dos matrices dependiendo de si el indicador de eje es menor o mayor que el origen del índice [ 8 ] (origen del índice = 1 en la ilustración siguiente):

Matrices anidadas

Los arreglos son estructuras cuyos elementos se agrupan linealmente como vectores o en forma de tabla como matrices , y en dimensiones superiores (3D o cúbicas, 4D o cúbicas en el tiempo , etc.). Los arreglos que contienen tanto caracteres como números se denominan arreglos mixtos . [ 9 ] Las estructuras de arreglos que contienen elementos que también son arreglos se denominan arreglos anidados . [ 10 ]

Control de flujo

Un usuario puede definir funciones personalizadas que, al igual que las variables, se identifican por su nombre en lugar de por un símbolo no textual. El encabezado de la función define si una función personalizada es niládica (sin argumentos), monádica (un argumento a la derecha) o diádica (argumentos a la izquierda y a la derecha), el nombre local del resultado (a la izquierda de la flecha de asignación ← ) y si tiene variables locales (separadas por punto y coma ';').

La distinción entre funciones con el mismo identificador pero diferente adicidad depende de la implementación. Si se permite, una función CURVEAREA podría definirse dos veces para reemplazar tanto la función monádica CIRCLEAREA como la diádica SEGMENTAREA mencionadas anteriormente, seleccionándose la función monádica o diádica según el contexto en el que se haga referencia a ella.

Las funciones diádicas personalizadas generalmente se pueden aplicar a parámetros con las mismas convenciones que las funciones integradas; es decir, los arreglos deben tener el mismo número de elementos o uno de ellos debe tener un único elemento extendido. Existen excepciones a esto; por ejemplo, una función para convertir moneda británica predecimal a dólares esperaría un parámetro con exactamente tres elementos que representen libras, chelines y peniques. [ 11 ]

Dentro de un programa o una función personalizada, el control puede transferirse condicionalmente a una instrucción identificada por un número de línea o una etiqueta explícita; si el destino es 0 (cero), esto finaliza el programa o regresa a la función que la llamó. La forma más común utiliza la función de compresión de APL, como en la plantilla (condición)/destino, que evalúa la condición a 0 (falso) o 1 (verdadero) y luego la usa para enmascarar el destino (si la condición es falsa, se ignora; si es verdadera, se deja sin modificar, por lo que se transfiere el control).

Por lo tanto, la función SEGMENTAREA puede modificarse para abortar (justo debajo), devolviendo cero si los parámetros (DEGREES y RADIUS a continuación) tienen signos diferentes :

ÁREA GRADOS SEGMENTAREA RADIO ; FRACCIÓN ; CA ; SIGNO ⍝ variables locales denotadas por punto y coma (;) FRACCIÓN GRADOS ÷ 360 CA CIRCLEAREA RADIO ⍝ esta instrucción de código APL llama a la función de usuario CIRCLEAREA, definida más arriba. SIGNO ( × GRADOS ) ≠× RADIO ⍝ << Lógica APL PRUEBA/determina si GRADOS y RADIO NO (≠ usado) tienen el mismo SIGNO 1-sí diferente (≠), 0-no (mismo signo) ÁREA 0 ⍝ valor predeterminado de ÁREA establecido = cero SIGNO / 0 ⍝ la ramificación (aquí, salida) ocurre cuando SIGNO=1 mientras que SIGNO=0 NO ramifica a 0. La ramificación a 0 sale de la función. ÁREA FRACCIÓN × CA 

La función SEGMENTAREA anterior funciona como se espera si los parámetros son escalares o matrices de un solo elemento , pero no si son matrices de múltiples elementos , ya que la condición termina basándose en un solo elemento de la matriz SIGN. Por otro lado, la función de usuario podría modificarse para manejar correctamente los argumentos vectorizados. El funcionamiento a veces puede ser impredecible, ya que APL define que las computadoras con capacidad de procesamiento vectorial deben paralelizar y pueden reordenar las operaciones de matrices en la medida de lo posible. Por lo tanto, pruebe y depure las funciones de usuario, especialmente si se utilizarán con argumentos vectoriales o incluso matriciales. Esto afecta no solo la aplicación explícita de una función personalizada a matrices, sino también su uso en cualquier lugar donde una función diádica pueda utilizarse razonablemente, como en la generación de una tabla de resultados.

90 180 270 ¯90 ∘. SEGMENTAREA 1 ¯2 4 0 0 0 0 0 0 0 0 0 0 0 0

Una forma más concisa, y a veces mejor, de formular una función es evitar las transferencias explícitas de control, utilizando en su lugar expresiones que se evalúen correctamente en todas o en las condiciones esperadas. A veces es correcto que una función falle cuando uno o ambos argumentos de entrada son incorrectos , precisamente para informar al usuario de que uno o ambos argumentos utilizados eran incorrectos. La siguiente es más concisa que la función SEGMENTAREA anterior. Es importante destacar que la siguiente maneja correctamente los argumentos vectorizados:

ÁREA GRADOS SEGMENTAREA RADIO ; FRACCIÓN ; CA ; SIGNO FRACCIÓN GRADOS ÷ 360 CA ÁREA CIRCULAR RADIO SIGNO ( × GRADOS ) ≠× RADIO ÁREA FRACCIÓN × CA ×~ SIGNO ⍝ Esta instrucción APL es más compleja, como una sola línea, pero resuelve argumentos vectorizados: una compensación: complejidad frente a ramificación 90 180 270 ¯90 ∘. ÁREA SEGMENTARIA 1 ¯2 4 0,785398163 0 12,5663706 1,57079633 0 25,1327412 2,35619449 0 37,6991118 0 ¯3,14159265 0

Evitar las transferencias explícitas de control, también llamadas ramificaciones, si no se revisan o controlan cuidadosamente, puede promover el uso de líneas de código excesivamente complejas , verdaderamente "modismos complejos y malinterpretados" y un estilo "solo de escritura", que ha hecho poco para que APL sea apreciado por comentaristas influyentes como Edsger Dijkstra . [ 12 ] Por otro lado, sin embargo, los modismos de APL pueden ser divertidos, educativos y útiles, si se usan con comentarios útiles ⍝ , por ejemplo, incluyendo la fuente y el significado y función previstos del/de los modismo(s). Aquí hay una lista de modismos de APL , una lista de modismos de IBM APL2 aquí [ 13 ] y una biblioteca de modismos de APL finlandés aquí .

Misceláneas

La mayoría de las implementaciones de APL admiten varias variables y funciones del sistema, generalmente precedidas por el carácter ⎕ (cuadrado) y/o ")" ( paréntesis de cierre ). Tenga en cuenta que el carácter ⎕ no es lo mismo que el símbolo de carácter faltante de Unicode . Particularmente importante y ampliamente implementada es la variable ⎕IO ( Índice de Origen ), ya que mientras que el IBM APL original basaba sus matrices en 1, algunas variantes más recientes las basan en cero:

There are also system functions available to users for saving the current workspace e.g., )SAVE and terminating the APL environment, e.g., )OFF - sometimes called hook commands or functions due to the use of a leading right parenthesis or hook.[16] There is some standardization of these quad and hook functions.

Fonts

The Unicode Basic Multilingual Plane includes the APL symbols in the Miscellaneous Technical block,[17] which are thus usually rendered accurately from the larger Unicode fonts installed with most modern operating systems. These fonts are rarely designed by typographers familiar with APL glyphs. So, while accurate, the glyphs may look unfamiliar to APL programmers or be difficult to distinguish from one another.

Some Unicode fonts have been designed to display APL well: APLX Upright, APL385 Unicode, and SimPL.

Before Unicode, APL interpreters were supplied with fonts in which APL characters were mapped to less commonly used positions in the ASCII character sets, usually in the upper 128 code points. These mappings (and their national variations) were sometimes unique to each APL vendor's interpreter, which made the display of APL programs on the Web, in text files and manuals - frequently problematic.

APL2 keyboard function to symbol mapping

Teclado APL2
APL2 Keyboard

Observe la tecla de encendido/apagado de APL, la tecla superior derecha, justo debajo. Observe también que el teclado tenía unas 55 teclas de símbolos APL únicas (68 listadas según las tablas anteriores, incluyendo símbolos comparativos, pero varios símbolos aparecen tanto en tablas monádicas como diádicas) (55 funciones (operadores) de APL se listan en el Manual de referencia de APL 5110 de IBM), por lo que con el uso de las teclas alt, shift y ctrl, teóricamente habría permitido un máximo de unas 59 (teclas) *4 (con pulsación de 2 teclas) *3 (con pulsación de tres teclas, por ejemplo, ctrl-alt-del) o unas 472 combinaciones de teclas diferentes, acercándose al máximo de 512 caracteres EBCDIC (256 caracteres por 2 códigos para cada combinación de teclas). Nuevamente, en teoría, el teclado que se muestra aquí habría permitido la entrada de teclado y el uso activo de aproximadamente 472 símbolos/funciones APL diferentes. En la práctica, las primeras versiones solo utilizaban aproximadamente el equivalente a 55 símbolos especiales de APL (sin incluir letras, números, signos de puntuación, etc.). Por lo tanto, las primeras versiones de APL solo utilizaban alrededor del 11 % (55/472) del potencial de utilización de un lenguaje simbólico en aquel momento, según los límites de teclas del teclado (sin incluir números, letras, signos de puntuación, etc.). En otro sentido, la utilización de los símbolos del teclado era cercana al 100 %, lo que resultaba muy eficiente, ya que EBCDIC solo permitía 256 caracteres distintos y ASCII solo 128.

Resolver acertijos

APL ha demostrado ser extremadamente útil para resolver problemas matemáticos, varios de los cuales se describen a continuación.

Triángulo de Pascal

Consideremos el triángulo de Pascal , que es una matriz triangular de números en la que los números en los extremos de las filas son 1 y cada uno de los demás números es la suma de los dos números más cercanos en la fila inmediatamente superior (el vértice, 1, se encuentra en la parte superior). A continuación se muestra una función de una sola línea en APL para representar visualmente el triángulo de Pascal:

Pascal { ' ' @ ( 0 =⊢ ) 0 , ⍨¨ a ¨ ⌽∊ ¨ 0 , ¨¨ a ! ¨ a ⌽⍳ } ⍝ Crea una función de usuario de una línea llamada Pascal Pascal 7 ⍝ Ejecuta la función Pascal para siete filas y muestra los resultados a continuación: 1 1 2 1 3 3 1 4 6 4 1 5 10 10 5 1 6 15 20 15 6 1 7 21 35 35 21 7

Números primos, contraprueba mediante factores

Determinar la cantidad de números primos (un número primo es un número natural mayor que 1 que no tiene divisores positivos aparte de 1 y él mismo) hasta algún número N. A Ken Iverson se le atribuye la siguiente solución en APL de una sola línea para este problema:

⎕CR 'PrimeNumbers' ⍝ Mostrar la función de usuario APL PrimeNumbers Primes PrimeNumbers N ⍝ La función toma un argumento derecho N (por ejemplo, mostrar números primos para 1 ... int N) Primes ( 2 =+ 0 = ( N ) ∘. |⍳ N ) / N ⍝ La función de una sola línea de Ken Iverson PrimeNumbers 100 ⍝ Mostrar todos los números primos del 1 al 100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 PrimeNumbers 100 25 ⍝ Hay veinticinco números primos en el rango hasta 100.

Con frecuencia es necesario examinar el recíproco u opuesto de una solución matemática ( factores enteros de un número ): Demuestre que el subconjunto de enteros del 1 al 15 no son primos enumerando sus factores de descomposición . ¿Cuáles son sus factores distintos de uno (números divisibles por, excepto 1)?

⎕CR 'ProveNonPrime' Z ProveNonPrime R ⍝Muestra todos los factores de un entero R, excepto 1 y el número mismo, ⍝ es decir, demuestra que no es primo. Se devuelve la cadena 'prime' para un entero primo. Z ( 0 = ( R ) | R ) / R ⍝ Determinar todos los factores para el entero R, almacenar en Z Z ( ~ ( Z 1 , R )) / Z ⍝ Eliminar 1 y el número como factores para el número de Z. ( 0 =⍴ Z ) / ProveNonPrimeIsPrime ⍝ Si el resultado tiene forma cero, no tiene otros factores y por lo tanto es primo Z R , ( " factores(excepto 1) " ) , ( Z ) , ⎕TCNL ⍝ Mostrar el número R, sus factores (excepto 1, él mismo) y un nuevo carácter de línea 0 ⍝ Terminado con la función si no es primo ProveNonPrimeIsPrime : Z R , ( " primo" ) , ⎕TCNL ⍝ La función se bifurca aquí si el número es primo.ProveNonPrime ¨ 15 ⍝ Demuestra que cada uno de los enteros del 1 al 15 (15) no es primo. 1 primo 2 primo 3 primo 4 factores ( excepto 1 ) 2 5 primo 6 factores ( excepto 1 ) 2 3 7 primo 8 factores ( excepto 1 ) 2 4 9 factores ( excepto 1 ) 3 10 factores ( excepto 1 ) 2 5 11 primo 12 factores ( excepto 1 ) 2 3 4 6 13 primo 14 factores ( excepto 1 ) 2 7 15 factores ( excepto 1 ) 3 5

secuencia de Fibonacci

Genera una secuencia de números de Fibonacci , donde cada número subsiguiente en la secuencia es la suma de los dos anteriores:

⎕CR 'Fibonacci' ⍝ Función de visualización Fibonacci FibonacciNum Fibonacci Nth ; IOwas ⍝ Encabezado de función, nombre de función=Fibonacci, función monádica con 1 argumento derecho Nth; variable local IOwas, y un num devuelto. ⍝Genera un número secuenciado de Fibonacci donde Nth es la posición # del número de Fibonacci en la secuencia. << descripción de la función IOwas ⎕IO ⎕IO 0 FibonacciNum 0 1 ↓↑+ . × / Nth / 2 2 1 1 1 0 ⎕IO IOwas ⍝ Para que esta función funcione correctamente, ⎕IO debe establecerse en cero.Fibonacci ¨ 14 ⍝ Esta instrucción APL dice: Generar la secuencia de Fibonacci sobre cada (¨) número entero (iota o ⍳) para los enteros 1..14. 0 1 1 2 3 5 8 13 21 34 55 89 144 233 ⍝ Secuencia generada, es decir, la secuencia de Fibonacci de números generada por el intérprete de APL.

Lecturas adicionales

  • Polivka, Raymond P.; Pakin, Sandra (1975). APL: El lenguaje y su uso . Prentice-Hall. ISBN 978-0-13-038885-8.
  • Reiter, Clifford A.; Jones, William R. (1990). APL con acento matemático (1.ª  ed.). Taylor & Francis. ISBN 978-0534128647.
  • Thompson, Norman D.; Polivka, Raymond P. (2013). APL2 en profundidad (Springer Series in Statistics) (Tapa blanda) (Reimpresión de la 1.ª  ed. original). Springer. ISBN 978-0387942131.
  • Gilman, Leonard; Rose, Allen J. (1976). APL: Un enfoque interactivo (Edición de bolsillo) (3.ª  ed.). Wiley. ISBN 978-0471093046.

Véase también

Referencias

  1. Iverson, Kenneth E. (1962-01-01). "Un lenguaje de programación". Actas de la conferencia conjunta de computación de primavera del 1 al 3 de mayo de 1962 sobre AIEE-IRE '62 (Primavera) . Nueva York, NY, EE. UU.: ACM. págs. 345–351 . doi : 10.1145/1460833.1460872 . S2CID 11777029 .  
  2. Baronet, Dan. "Operadores APL perspicaces" . archive.vector.org.uk . Vector - Revista de la Asociación Británica de APL . Consultado el 13 de enero de 2015 .
  3. MicroAPL. "Operadores primitivos" . www.microapl.co.uk . MicroAPL . Consultado el 13 de enero de 2015 .
  4. MicroAPL. "Operadores" . www.microapl.co.uk . MicroAPL . Consultado el 13 de enero de 2015 .
  5. Progopedia. "APL" . progopedia.com . Progopedia . Consultado el 13 de enero de 2015 .
  6. Dyalog. "Funciones y operadores D agrupados de forma general en categorías" . dfns.dyalog.com . Dyalog . Consultado el 13 de enero de 2015 .
  7. IBM. "Manual de referencia de IBM 5100 APL" (PDF) . bitsavers.trailing-edge.com . IBM. Archivado del original (PDF) el 14 de enero de 2015. Consultado el 14 de enero de 2015 .
  8. Brown, Jim (1978). "En defensa del origen del índice 0" . ACM SIGAPL APL Quote Quad . 9 (2): 7. doi : 10.1145/586050.586053 . S2CID 40187000 . 
  9. MicroAPL. "Manual del lenguaje APLX" (PDF) . www.microapl.co.uk . MicroAPL - Versión 5.0 Junio ​​2009. pág. 22. Consultado el 31 de enero de 2015 . 
  10. Benkard, J. Philip (1992). "Matrices y operadores anidados: algunos aspectos en profundidad". Actas de la conferencia internacional sobre APL - APL '92 . ACM SIGAPL APL Quote Quad. Vol. 23. págs. 7–21 . doi : 10.1145/144045.144065 . ISBN   978-0897914772. S2CID 7760410 . 
  11. Berry, Paul "APL\360 Primer Student Text" , IBM Research, Thomas J. Watson Research Center, 1969.
  12. "Tratado" (PDF) . www.cs.utexas.edu . Consultado el 10 de septiembre de 2019 .
  13. Cason, Stan (13 de mayo de 2006). "Biblioteca de modismos APL2" . www-01.ibm.com . IBM . Consultado el 1 de febrero de 2015 .
  14. El "menos alto" de APL se aplica al único número que sigue, mientras que la función de menos monádica cambia el signo de toda la matriz a su derecha.
  15. "El espacio de trabajo - Funciones del sistema" . Microapl.co.uk. pág. (hacia la parte inferior de la página web) . Consultado el 5 de noviembre de 2018 . 
  16. "Referencia del lenguaje APL" (PDF) . Consultado el 5 de noviembre de 2018 .
  17. Tabla Unicode "Técnico misceláneo (incluido APL)" (PDF) .
  • Referencia de caracteres APL: Página 1 , Página 2 , Página 3 , Página 4
  • Página de fuentes de la Asociación Británica de APL
  • Página de códigos 293 de IBM, también conocida como página de códigos APL en mainframes.
  • Información general sobre los caracteres APL en la wiki de APL.
  • Ampliando APL y sus operadores de símbolos de teclado.
  • Lee, Xah. "Cómo crear un diseño de teclado APL o de símbolos matemáticos" . Consultado el 13 de enero de 2015 .

Tutoriales genéricos en línea

  • Introducción práctica a APL 1 y APL 2. Archivado el 13 de marzo de 2017 en Wayback Machine por Graeme Donald Robertson.
  • APL para PC, servidores y tabletas: NARS , una versión completa de APL/2 con matrices anidadas, sin restricciones y de descarga gratuita, desarrollada por Sudley Place Software.
  • Intérprete gratuito descargable de GNU APL para APL por Jürgen Sauermann
  • Tutoriales de APL en YouTube subidos por Jimin Park, 8 vídeos instructivos de introducción/para principiantes.
  • Lista de tutoriales recopilados de SIGAPL
  • Aprende APL: Un tutorial de APL por MicroAPL

Reglas de sintaxis

  • "El juego de la vida de Conway en la APL, en YouTube" . YouTube .
  • Iverson, Kenneth E. (1983). «Sintaxis y semántica de APL». Actas de la conferencia internacional sobre APL - APL '83 . ACM SIGAPL APL Quote Quad. Vol.  13. págs. 223–231 . doi : 10.1145/800062.801221 . ISBN  978-0897910958. S2CID 16511283 . 
  • Gffer, M. (1989). «Un futuro APL: ejemplos y problemas». Actas de la conferencia sobre APL como herramienta de pensamiento - APL '89 . ACM SIGAPL APL Quote Quad. Vol.  19. pp. 158–163 . doi : 10.1145/75144.75166 . ISBN  978-0897913270. S2CID 6011221 .