**APL** (***A** **P**rograming **L**anguage*, tamén coñecido como *Array Processing Language* desde fai algúns anos) é un linguaxe de programación interpretado desenvolvido por Kenneth Iverson, de IBM, a finais dos anos 60.

É unha linguaxe moi conciso, cunha sintaxe moi sinxela. Está orientado a traballos con matrices, coa que se poden facer todo tipo de operacións lóxicas ou matemáticas. Ata se poden definir novas operacións matriciales.

É dunha potencia tremenda. Unha soa sentenza pode traducirse en miles delas noutras linguaxes, por exemplo Fortran. Como exemplo, a linguaxe de simulación de circuítos, SIAL, ocupaba preto de 25 000 sentenzas en Fortran-Assembler e, ao ser reescrito en APL, todo o programa podíase imprimir en dous folios [1]. Por outra banda, a pesar de ser unha linguaxe de tan alto nivel, tamén é capaz de manipular a escala de bits e ten interfaces con linguaxes de programación de baixo nivel (C, ensamblador...) mediante os chamados procesadores auxiliares.

Ten a propiedade de que desde unha rutina pódese crear, compilar e executar, en tempo de execución, outras, o que o fai moi apropiado para a fabricación de compiladores e intérpretes.

Os seus problemas radican en que: 1) Necesita teclado especial para pór os operadores lóxicos e simbólicos. 2) Os programas escritos en APL son tan concisos que son difíciles de documentar e de comprender.

Aplicacións do APL
------------------

O APL, ao ser tan conciso, é unha linguaxe que permite un ciclo de desenvolvemento moi veloz. Por outra banda, ao ser interpretado, a velocidade de execución é tipicamente máis lenta que a das linguaxes de programación compilados. Por iso, considérase unha boa linguaxe para o desenvolvemento de prototipos.

Entre as súas aplicacións máis coñecidas está o seu uso na película Tron de Walt Disney para a xeración dos efectos especiais [2], e no sistema Deep Blue de IBM que venceu a Kasparov ao xadrez.

Como curiosidade, na novela Cheap Complex Devices de J. C. Sundman, o autor afirma que o contido do libro foi xerado automaticamente por un computador escrito en APL, o que lle valeu o premio Douglas R. Hofstadter de creación de novelas por computador en 1997 [3]. Todo iso, naturalmente, é un artificio literario.

Sucesores do APL
----------------

Kenneth Iverson, posteriormente, estivo á fronte do desenvolvemento dunha linguaxe de programación que presentaban como o sucesor de APL, chamado J. Unha das características particulares de J é o que se deu en denominar programación funcional tácita; onde se considera que para expresar programas non é necesario nomear variables, nin parámetros a funcións (Estes conceptos de programación tácita foron incorporados á linguaxe Logo na biblioteca LogoFE). En J, a variedade das rutinas que en APL chámanse #operador\\\ é moito maior.

Notas
-----

* M. Alfonseca, "SIAL/71, a Continuous Simulation Compiler", in "Advances in Cybernetics and Systems", Ed. J. Rose, Gordon e Breach, Londres, Vol. 3, 1974, 1319-1340.
* David Selby, "Jottings from the business intelligence jungle". In APL '02: Proceedings of the 2002 conference on APL, 2002, páxinas 190-197.

|  |  |
| --- | --- |
|  | Wikimedia Commons ten máis contidos multimedia na categoría:  ***APL*** |

| * v
* c
* e
Linguaxes de programación |
| --- |
| Baixo nivel | 

|  |  |
| --- | --- |
| Primeira xeración | Código máquina |
| Segunda xeración | Assembly |

 |
| Alto nivel | 

|  |  |
| --- | --- |
| Terceira xeración | 
* A+
* ABC
* Algol
* B
* BASIC
* C
* C++
* C#
* COBOL
* CPL
* D
* E
* Fortran
* Go
* Java
* JavaScript
* Lisp
* Objective-C
* PL/1
* Pascal
* Smalltalk
* Visual Basic .NET

 |
| Cuarta xeración | 
* Clarion
* Clipper
* Clojure
* Common Lisp
* Erlang
* GNU Octave
* Haskell
* Lisp
* Lua
* Julia
* Perl
* PHP
* Prolog
* Python
* R
* Ruby
* Rust
* S
* Scilab
* Stata
* SQL

 |
| Quinta xeración | 
* Mercury
* OPS5
* Prolog

 |

 |
| 
* Ambiente de desenvolvemento
* Metaprogramación
* Programación a nivel funcional
* Programación estruturada
* Programación non estruturada
* Programación imperativa
* Programación modular
* Programación multidimensional
* Orientación a obxectos

 |

|  |  |
| --- | --- |
| Control de autoridades | 
* Wd: Q296187
* BNE: XX528234
* LCCN: sh85005991

 |