Oui, mais Gills59 pratique un dialecte particulièrement gratiné du RPL. Nous, gens du Nord ne pratiqouns pas le sud-aldébarien du RPL. Trop dur et avec notre accent, on comprend rien !
Nous ici au nord nous pratiquons un dialecte beaucoup plus basic :
LESSON n°1 : le RPL c’est du BASIQUE
Code : Tout sélectionner
10 : DIM N(9)
15 : INPUT "X0=";T$ « ->STR -> T
20 : FOR I=0 TO 9:N(I)=0:NEXT I « { 10 } 0 CON -> N
25 : FOR I=1 TO LEN(T$) « 1 T SIZE FOR i
30 : C%=VAL(MID$(T$,I,1)) T i i SUB STR-> -> c
35 : N%(C%)=N%(C%)+1 « 'N(c)' 1 STO+ »
40 : NEXT I NEXT
40 : T$="" ""
45 : FOR I=9 TO 0 STEP -1 9 0 FOR i
50 : IF N%(I)>0 IF N i GET 0 >
THEN T$=T$+MID$(STR$(N%(I)),2)+CHR$(48+I) THEN N i GET ->STR + i ->STR + END
55 : NEXT I -1 STEP
60 : PRINT T$ »
65 : GOTO 20 »
» ‘ROBIN’ STO
Equivalences :
-------------------
INPUT et -> l’instruction de saisie et d’affectation se traduit directement par la création d’une variable locale à l’aide de la flèche -> qui retire la valeur de la pile. Comme la fonction INPUT attend une chaine de caractère (T$), on prend le soin avant de transformer en chaine par ->STR.
DIM déclare un tableau, CON construit un vecteur ou une matrice, c’est pareil. On indique la dimension entre crochet (ici {10]) et la valeur initiale (ici 0). On utilise la flèche pour mémoriser ce tableau (vecteur en fait car une seule dimension) dans la variable locale au programme N.
LEN et SIZE pour une chaine de caractères.
FOR se traduit par FOR. C’est bien pratique, mais le RPL est comme le RPN, il faut inverser l’ordre des arguments.
VAL qui devient STR-> et qui rend le même service pour les nombres. VAL est l’instruction inverse de STR$, comme STR-> l’inverse de ->STR. Mais comme expliqué plus loin, les instructions RPL sont plus généralistes.
MID$ et SUB pour les chaines de caractère l’instruction SUB va rendre les mêmes services que MID$ mais là aussi il faut faire attention à l’ordre des arguments qui se trouve bien évidemment avant l‘apple’ de l’instruction (et dans l’ordre strictement établit par sa syntaxe).
= en tant qu’affectation n’existe pas sur un système RPL, car comme ses très dignes ancêtres RPN, les RPL n’ont pas d’égale – tout au moins pour l’affectation car il y a un symbole = pour traiter les égalités et équations. On notera l’utilisation de STO+ comme avec les RPN, bien pratique.
NEXT et NEXT même position, même effet.
LET T$="" qui sera traduit sans affectation, pourquoi mémoriser un objet qui ne sera pas réutilisé. Surtout qu’en plus c’est la chaine qui sera retournée à la fin du programme. Laissons la donc à sa place au sommet de la pile.
IF ... THEN qui devent IF ... THEN ... END. Il faut bien délimiter la fin de la clause, car contrairement au BASIC, il n’y a pas de notion de fin de ligne. Sinon, structure de plsu similaire (mais pas identique).
STR$ et ->STR pour convertir nombre en chaine de caractère. En fait tout objet (vecteur, matrice, nombre, liste, etc). Le RPL a bien d’autres types d’objet que le BASIC n’a pas et les mêmes instructions s’appliquent en général à de multiples types.
N(i) qui devient N i GET. L’instruction GET permet d’extraire l’i-ème objet d’une liste ou collection. Cela s’applique aussi bien au élément d’un vecteur, d’une matrice, d’une liste, etc. On aurait pû utiliser une syntaxe algébrique, plus proche du BASIC en utilisant par exemple ‘N(i)’ EVAL ou ‘N(i)’ ->NUM. Le EVAL ou ->NUM sont nécessaire car le RPL est capable de calcul formel et donc l’expression ‘N(i)’ ne sera pas implicitement évalué sauf si l’on en donne explicitement l’ordre (EVAL) ou qu’une valeur numérique est requise (->NUM).
STEP correspond à STEP, mais contrairement au BASIC, il faut là aussi veiller à donner les arguments avant l’appel de l’instruction qui de plus doit être placée en lieu et place du NEXT. Il y une différence fondamentale entre les deux STEP, en BASIC on ne peut pas changer le pas en cours de boucle. EN RPL, le pas peut être adapté à chaque passage.
Et enfin le STO qui est utilisé pour mémoriser le programme, contrairement aux systèmes BASIC, les RPL peuvent stocker en mémoire toute sorte d’objets en mémoire organisée comme un arbre, chaque branche de l’arbre ayant accès aux objets situé dans les branches qui les portent jusqu’aux objets se trouvant dans la racine.
En BASIC, il n’ya en général qu’une seule zone de mémoire programme et il faut avoir un lecteur de disquette ou de disque pour organiser les programmes en arbre à l’aide des commande LOAD SAVE DIRECTORY etc. Mais contrairement au RPL, les programmes n’ont pas accès directement aux autres programmes ou objet de l’arborescence.
Bon, demain je ferais la lesson suivante :
LESSON n°2 : LE RPL c’est du RPN
Gilles59 a déjà dans ce forum démontré le contenu de la leçon n°3
LESSON n°3 : Le RPL c’est du LISP
Et Forthman ne démentira pas le sujet de la leçon n°4 :
LESSON n°4 : Le RPL c’est du Forth
Reste à trouver un volontaire pour traiter le sujet suivant;
LESSON n°5 : Le RPL language orienté objet
Travaux Pratiques : Ceux qui suivent Silicium depuis quelques temps save aussi que le RPL c'est du LOGO et que l'on peut dessiner des fractales et autres flocons de Koch.
CONCLUSION : c'est pas du hasard.
D.M.: (à rendre pour le prochain cours) Trouver et corriger le bug qui s'est glissé dans le programme RPL de la leçon n°1.