Pour dire que je suis à 100 % d'accord !
Parfois c'est pas deux semaines qu'il faut pour que l'auteur perde le fil de son programme, cela peut arriver du jour au lendemain !
En effet, en RPL, le listing d'un programme ne donne pas les informations essentielles qui permettraient de comprendre son fonctionnement. Le lecteur est constamment obligé de rétro-analyser le code qu'il a sous les yeux.
Même quelque chose comme << DUP SIN SWAP / >> nécessite une analyse minutieuse pour comprendre qu'une valeur est prise dans la pile puis remplacée par le résultat du calcul. Et c'est un calcul simple ! Dès que c'est compliqué, c'est très vite impossible ou fastidieux !
Sans compter les cas où le code étudié (on ne relit pas du RPL, on l'étudie) contient une instruction dont on ne connais pas le fonctionnement ou si celui-ci change en fonction des circonstances (drapeaux, types de données, etc...) !
C'est donc bien vrai que le RPL est un langage 'Write only' et souvent 'Write only at once'
Comme gégé, je suis très surpris que l'ordre immuable des arguments ne soit pas respecté avec les variables locales. On a bien 30 'A' STO ou 5 FIX (au lieu des STO 00 ou FIX 5 du RPN) mais pas « a b c → ... » ni « 1 9 a FOR ... »
Mais le plus grave c'est les mouvements de la pile avec n ROLL ou n PICK et autre OVER SWAP ROT DUPDUP qui opère sur quelque chose que l'on ne voit pas, qu'aucun élément dans le code ne permet de convenablement tracer. Sans compter la façon parfois abscons qu'on certains modèles à présenter le code avec des retours à la ligne forcés et la perte de toute indentation.
Comment faire apparaître tout les mouvements de la pile sans rendre les listing illisibles ??
Evidemment, l'absence de numéro repère dans les instructions interdit tout algorithme basé sur de subtiles GOTO comme dans d'autres langages (dont le RPN d'ailleurs). Mais bon ,le GOTO c'est le mal absolu ! Non ?
Et enfin, je dois m'excuser, j'oublie qu'il existe des fous qui désactivent la fonction LAST ou UNDO ! Sur une HP-48, il n'y a d'après moi aucune raison de le faire, cette possibilité est héritée des HP-28C qui avaient trop peu de mémoire. Désactiver les fonctions LAST et autres UNDO étaient alors justifié lorsque l'on manipulait des matrices de grande taille. Et uniquement dans cet usage.
Désactiver le LAST sur HP28S, HP48s, HP48g, HP48sx, HP48gx, HP-48g+, HP50g n'est que pure folie !
Le type de folie que l'on aime bien avoir et qu'ont souvent les gens que l'on fréquente sur ce forum
A mon avis, aucune machine RPL ne succédera à l'HP50g à cause du manque de présentation fonctionnelle des listings RPL qui resteront à jamais de vagues listes d'instructions incompréhensibles et incohérentes entre guillemets.
Sinon, j'encourage ben à persévérer dans son apprentissage, le RPL est tout de même le langage de programmation puissant qui permet de tirer le meilleurs parti des machines en question. C'est une façon d'organiser données et codes très particulière qui convient bien à l'usage de ces systèmes.
Bon c'est pas tout, tous ces longs posts prennent du temps et je n'ai toujours pas compris ce que fait le programme de Ben.
Mais pour lister les carrés aux chiffres croissants, j'utiliserai, imprudent que je suis sur HP28/HP48, un truc du style :
Code : Tout sélectionner
« 1 9999
FOR n n SQ 99
IF OVER
DO IP 10 / LAST MOD ROT MIN
IF LAST >
THEN DROP2 0 0
END SWAP
UNTIL DUP 1 <
END
THEN OVER 1 DISP
END DROP2
NEXT
»
Code : Tout sélectionner
« 1 9999
FOR n n SQ → n2
« 99 n2
IF
DO IP 10 / LAST MOD ROT MIN
IF LAST >
THEN DROP2 0 0
END SWAP
UNTIL DUP 1 <
END
THEN n2 1 DISP
END DROP
»
NEXT
»
Oui, je sais, je suis imprudent.
Un inconvénient de ce programme est que les carrés déterminés s'affichent trop vite et ne sont pas mémorisés quelque part dans la calculette.
Mais comment corriger cela ?