L'APL (initialement , officieusement Également ) est un langage de description de traitement de l'information devenu ensuite langage de programmation, conçu entre 1957 et 1967 à Harvard par Kenneth Iverson pour décrire commodément des opérations globales sur des tableaux (booléens, numériques ou, dans une moindre mesure, de caractères). Iverson décrivait la grammaire de son langage comme similaire à celle d'un langage naturel (substantifs, verbes, adverbes, conjonctions, copules et ponctuation).. Le langage n'utilise cependant pas de mots, mais beaucoup de signes, chacun correspondant à un concept."La vraie puissance d'APL réside dans sa capacité à exprimer simplement une idée simple" (Dyalog).
Révolutionnaire à son lancement (usage du terminal à boule ou à écran alors que la carte perforée ou le restaient encore la référence, aucune déclaration nécessaire, typage et dimensionnement des variables inutile, gestion dynamique de mémoire, interactivité totale, concision par traitement direct des tableaux évitant l'écriture de boucles, persistance), il connut un succès croissant jusqu'au milieu des années 1980, époque où le tableur le concurrença pour les petits travaux, et des outils comme SAS, puis R pour le travail sur de plus grands volumes de données que ceux des tableurs de 1985.
En 2020, la disponibilité de processeurs très rapides adressant plusieurs gigaoctets de mémoire vive et l'existence d'interpréteurs Open Source peuvent le rendre à nouveau intéressant pour un public de passionnés.Un passionné décrit Dyalog APL avec enthousiasme. Rob Pike, créateur du langage Go, en parle en 2014 avec enthousiasme. et en 2020, il livre au public le code source du langage Ivy, une fondation d'APL en langage Go..
Dans sa version GNU APL, il est même utilisable comme langage de script.
Le langage APL de départ fait l'objet de la norme ISO 8485 (1989). L'APL étendu (fondé sur APL2) est fixé par la norme ISO/CEI 13751 (2001).
Note : Vérifiez que votre navigateur accepte bien l’Unicode ; dans le cas contraire, vous verrez s’afficher des rectangles blancs ou des points d’interrogation à la place des caractères APL. Cette question est détaillée sur la Toile.. Aujourd'hui (2017) les navigateurs sur PC comme Mozilla Firefox ou Microsoft Edge ne posent aucun problème pour afficher les caractères APL en Unicode. Quelques problèmes d'affichage résiduels subsistent encore sur tablettes Android.
Historique Les exemples sont donnés en double : une forme de copie d'écran dont le rendu sera correct quel que soit le navigateur que vous employez, et une en forme de texte que vous pouvez copier/coller par exemple dans NARS2000 (voir plus bas) pour l'exécuter, éventuellement avec quelques variantes. Le rendu de la page dépendra de votre police et de votre niveau de zoom par défaut. Vous pouvez les modifier, par exemple sur un PC par Ctrl+molette de la souris, en fonction de la résolution de votre écran.
Un historique en anglais d'APL est donné en PDF dans IBM Systems Journal, volume 30, (1991) Historique d'APL, par Adin Falkoff (IBM). Un décrivant ses progrès depuis 1978 existe également APL since 1978 (ACM, 2020).
APL s’est montré particulièrement adapté dès ses débuts aux calculs statistiques, aux ventilations, aux consolidations, aux descriptions fonctionnelles d’architectures comme celle de l’IBM 360, aux graphiques interactifs (GRAPHPAK) et à quelques travaux en combinatoire et en théorie des graphes. Il a également été utilisé pour le prototypage d’applications et l’écriture de langages de manipulation simples dans le cadre d’un infocentre en masquant les symboles appropriés sous des dénominations commodes et parlantes, par exemple en permettant d’écrire simplement :
MOYENNE X pour (+/X)÷⍴X. "(Somme des éléments de X), divisée par le nombre d'éléments de X)"
NORMALISER X pour X÷+/X "Diviser chaque élément de X par la somme de tous les éléments de X" etc.
Si l'on envisage des tableaux gigantesques, la notion de MapReduce n'est pas loinThe Hadoop Ecosystem diapo 5 et suivantes, et de fait plusieurs implémentations d'APL utilisent, sans que l'utilisateur ait à en coder l'utilisation lui-même, le parallélisme du matériel (voir plus bas).
Il permet de manipuler aisément des tableaux de N dimensions (N variant de 7 à 255 selon l’implémentation considérée, avec des tailles de 0 à 65000 et plus sur chaque dimension) de façon globale. Les opérations puissantes, calculs de feuilletage (lamination) ainsi que les opérateurs de réduction /, expansion \, produit intérieur . et produit extérieur ∘. et les opérations de compression / évitent souvent toute nécessité d’indices de boucle explicite - ainsi d’ailleurs que l’usage de boucles lui-même.
Iverson insistait sur le fait qu'APL était un langage de pensée tout autant qu'un langage de programmation. C'est en effet une notation mathématique rigoureuse et conciseIverson appelait au début son langage IBM (Iverson's Better Maths).
Les symboles APL représentant des opérations utilisables en programmation comme en calcul immédiat à la console, par exemple le « domino » ⌹ qui inverse directement une matrice carrée, ou résout un système d’équations linéaires surdimensionné au sens des moindres carrés si la matrice est rectangulaire : a←2 2⍴⍳4 ⌹a ¯2 1 1.5 ¯0.5 On estimait dans les années 1970-80 qu’une équipe de 5 développeurs APL avait la puissance de développement d’une équipe de 25 programmeurs FORTRANTECHNIP : Description de l'équipe informatique. L’application APL se montrait plus gourmande en ressources matérielles, mais le prix de celles-ci était en constante diminution. En 2013, son adaptation à la programmation agile lui donne un regain d'intérêt pour toutes les applications à mettre en place ou faire évoluer rapidement, aussi bien que pour les applications à courte durée de vie. Il a été utilisé entre autres. par la NASA, British Airways, la Banque de France (études économiques éclair), la Direction générale des Finances publiques française (impact fiscal de lois nouvelles), etc.
Après avoir connu le creux de la vague en 2009, l'intérêt pour ce langage remonte significativement depuisrecherches concernant le langage APL sur Google. En 2017, on constate sur la carte fournie par Google que l'Iran et l'Indonésie semblent porter un intérêt particulier à ce langage/.
Depuis 2013 également, il est proposé pour la réalisation de servletsAPL: la technologie.
Son interface initiale (bicolore en mode machine à écrire) a inspiré celle de logiciels comme Maple.
Présentation
APL innovait à son lancement par plusieurs aspects conviviaux : pas de déclaration de types ni de réservations de taille, une variable contenant tout simplement ce qu’on a mis dedans (scalaire ou tableau ; booléens, entiers, caractères ou nombres flottants) ; possibilité d’interrompre un programme, d’interroger et de modifier des variables, et de reprendre l’exécution ; ou bien de tout stocker en l’état et de reprendre le lendemain en retrouvant les objets de la zone de travail — fonctions, variables et états d’exécution — exactement comme on les avait laissés (bref, de la persistance avant la lettre… dès 1969 !) ; gestion dynamique de mémoire automatique ; pas de syntaxe compliquée pour afficher des résultats : quand un résultat est calculé sans être envoyé ensuite dans une variable, alors il est affiché simplement au terminal dans le format estimé le plus lisible.
Exemples
Ainsi pour écrire « Hello, World! » en APL, les choses se passent ainsi :
'Bonjour, le monde !' ⍝ tapé par l’utilisateur Bonjour, le monde ! ⍝ réponse du terminal
2+2 3 5 7 ⍝ donne 4 5 7 9
Il faut y ajouter la possibilité spectaculaire d’indexer un tableau par un autre tableau. Ainsi :
'LE CHAT'[7 5 2 3 4 6 7] ⍝ donne THE CAT
Voire :
'LE CHAT'[2 3 ⍴ 7 5 2 4 6 7] ⍝ donne THE CAT
Pas de traduction automatique ici ni dans un cas ni dans l'autre : l'indice a simplement été remplacé par ce qui était indicé (ainsi T est le septième caractère), ce qui est le propre de l'opération d'indexation. Ce qui est indicé prend également la forme de l'indice (ainsi, une matrice 2x3 dans le second cas)Cet exemple était présenté par Claude Hans dans une brochure interne du centre scientifique IBM de Grenoble. Il fut repris par Bernard Robinet dans son ouvrage sur le langage..
Grâce à sa priorité de droite à gauche, le langage se lit simplement, comme une langue naturelle : « 1 plus somme des inverses des factorielles des entiers de 1 à 30 » s'écrira :
1++/÷!⍳30 ⍝ qui donne 2.718281828
Le même résultat (c'est-à-dire la valeur de e) peut s'obtenir en frappant directement *1, ce qui signifie exponentielle 1.
L'APL des origines ne connaissait que scalaires et tableaux (numériques ou de caractères). Il gère maintenant des tableaux de tableaux et permet également à l'utilisateur de définir lui-même ses propres « opérateurs »De même qu'une primitive agit sur des opérandes, un opérateur agit sur des primitives. Ainsi l'opérateur / (reduction) compose la primitive qui le précède sur la totalité d'un vecteur. Par exemple +/X effectue la somme de tous les éléments de X, x/X leur produit, etc., ce qui correspond en algèbre aux signes sigma et pi..
Il travaille également en nombres complexes automatiquement si les besoins du calcul le demandent. La valeur s'écrit et en conséquence donne . NARS2000 reconnaît pour sa part non seulement les nombres complexes, mais également les quaternions Nombres hypercomplexes en APL Quaternions en APL : si l'on écrit 0+1J, le système l'imprime – et l'interprète – comme 0i0j1k0 et 0i0j1k0*2 vaut bien entendu ¯1i0j0k0. Les octonions sont également supportés (1i2j3k4l5ij6jk7kl8).
Opérations sur tableaux Le caractère ⎕ se lit "quad".
⎕←A←2 2⍴⍳4 ⍝ imprime une matrice A de taille 2x2 constituée des nombres de 1 à 4 1 2 3 4
A=2 ⍝ donne une matrice booléenne indiquant les éléments de A égaux à 2 0 1 0 0
A, A ⍝ concatène, horizontalement, la matrice A avec elle-même, formant une matrice de 2x4 1 2 1 2 3 4 3 4
A, 5 ⍝ concatène le scalaire 5 à la matrice A 1 2 5 3 4 5
A, +/A ⍝ concatène verticalement (⍪) à A un vecteur 'somme de A par colonnes' (+/A) 1 2 3 3 4 7
A⍪+⌿A ⍝ donne 1 2 3 4 4 6 même chose suivant l'autre axe : colonnes
A, [.5]0 ⍝ donne 1 2 3 4 0 0 0 0 concaténation en créant une nouvelle dimension : la matrice devient cube A, [1.5]0 1 2 0 0 3 4 0 0 Cette opération a créé une nouvelle dimension sur un autre axe.
Le produit externe alias cartésien, crée des tableaux à partir de vecteurs, à la manière d'une table de multiplication : 1 2∘.+10 20 30 11 21 31 12 22 32 ⎕←a←,1 2∘.+10 20 30 11 21 31 12 22 32 a[⍋a] 11 12 21 22 31 32 La primitive «⍋», que l'on nomme grade-up, fournit la permutation qui classe en ordre croissant les éléments d'un vecteur (et non ce vecteur classé lui-même). En d'autres termes, «a[⍋a]» renvoie toujours un vecteur trié, et «⍋a» toujours un vecteur de permutation formé des éléments de «⍳⍴a» permutés, ce qui constitue un moyen concis et économique de créer et combiner des permutationsExemple : la puissante expression ((ρL)ρ⍋⍋LιL,R)ι(ρR)ρ⍋⍋LιR,L. De telles permutations s'obtiennent facilement par tirage exhaustif : « 52?52 » pour un tirage de 52 cartes parmi 52.
Opérations sur les ensembles
Les symboles ensemblistes (∊, ∪, ∩, ⊆, ⊇, ⍦...) existent en APL, et font l'objet d'extensions particulières permettant de travailler en ensembles simples (dont chaque élément n'apparaît qu'une fois) ou bien multisets dont chaque élément peut apparaître plusieurs fois, utiles pour les combinaisons de Bose-EinsteinOpérateur combinatoires sur les ensembles
Selon que les éléments de ces ensembles possèdent une identité propre ou au contraire non (c'est-à-dire sont indiscernables), il existe de traiter les ensembles.
Opérateurs