User:François-Dominique Armingaud

From NARS2000
Jump to navigationJump to search

APL : officially "A Programming Language", colloquially, "Array Processing Language" (though Octave and GNU R are too) NARS

NARS : Nested Arrays Research System

I switched away from APL because every application I wrote needed a lot of associative access, that APL did not allow very gracefully, so I went to Perl. Also used PHP 5 and Regina REXX and I came here to see whether NARS had that possibility. However my first worry is how to make [ and ] appear with the French Keyboard. Normally [ is AltGr-5 and ] is AltGr-) : none of them seem to generate anything, unless I goofed somewhere.

Here is what is said on the French language Wikipedia about APL :

"APL n’a jamais officiellement connu les tables associatives, indexant un tableau avec autre chose que des valeurs entières. On ne peut donc pas écrire :

CAPITALE[⊂'FRANCE']←⊂'PARIS'

ou, pour rester dans le vectoriel,

CAPITALE['FRANCE' 'ESPAGNE' 'ITALIE']←'PARIS' 'MADRID' 'ROME'

ce qui est regrettable, car :

  1. une telle extension ne demanderait que très peu de modification de syntaxe, et n'en demanderait aucune des programmes existants
  2. les langages modernes permettent l'indexation par des chaînes de caractères (soit l'indexation des tableaux comme en PHP qui autorise à écrire $capitale['France']='Paris';, soit via des objets voisins comme les tables de hachage en Perl[1]).
  3. rares sont les applications où il ne faille pas gérer des accès par symboles plutôt que par numéros. Si APL ne le permet pas de façon immédiate, l’utilisateur se tourne naturellement vers d’autres langages répondant mieux à ses besoins.

Il est peu ergonomique de contourner cette lacune au prix de variables supplémentaires, comme par exemple: FRANCE←32 (dès lors, CAPITALE[FRANCE]←⊂"PARIS". Si le pays provient d'une saisie, l'indice peut être retrouvé par "execute" : ⍎"FRANCE" qui rend 32, mais l'application perd en robustesse et on encombre inutilement la table des symboles (APL/X contourne la difficulté par des namespaces).

Une autre manière est de définir un vecteur des noms de pays : PAYS ←'BELGIQUE' 'FRANCE' , l'instruction devenant alors : CAPITALE[PAYS⍳⊂'FRANCE']←⊂'PARIS'

Mais en ce cas, indépendamment de la lisibilité plus faible, le temps d'accès n'a plus le moindre rapport avec un accès direct de type "hash" en Perl ou PHP, surtout si s'il y a des centaines de noms.

Non seulement la lisibilité des programmes n'y gagne rien, mais leur facilité de maintenance s'effondre compte tenu des variables surajoutées.

  1. $capitale{'France'}='Paris';