02. Fonction RENAME sur HP48 - Courbis, "LE" Blog Officiel

02. Fonction RENAME sur HP48

mardi 26 juin 2007, par Paul Courbis (mis à jour samedi 20 novembre 2010)

La HP48 ne dispose pas de commande permettant de renommer une variable (programme, valeur...). Voici comment remédier à cela en RPL de base

Une première version

<< 
   -> OLD NEW 
   << 
      OLD RCL NEW STO OLD PURGE 
   >> 
>>

Une version un peu plus élaborée

La version précédente ne contrôle pas le type des arguments, ceci peut se faire grace à la fonction TYPE qui renvoi 6 pour un nom :

<< 
   -> OLD NEW 
   << 
      IF 
         OLD TYPE 6  == NEW TYPE 6 == AND 
      THEN
         OLD RCL NEW STO OLD PURGE 
      ELSE
         "Invalid argument types"
      END
   >> 
>>

Ca ne suffit pas...

Oui mais... si la destination existe déjà on va l’écraser. Nous allons protéger cela en tentant un RCL sur la destination et en traitant l’erreur :

<< 
   -> OLD NEW 
   << 
      IF 
         OLD TYPE 6  == NEW TYPE 6 == AND 
      THEN
         IFERR
            NEW RCL
         THEN
            DROP 
            OLD RCL NEW STO OLD PURGE 
         ELSE
            DROP "Destination already exists !" DOERR
         END
      ELSE
         "Invalid argument types !" DOERR
      END
   >> 
>>

Pour fignoler !

dernier problème, l’ordre des variables est modifié par le RCL/PURGE/STO. Avec les fonctions VARS (liste des variables) et ORDER (choix de l’ordre dans le menu), nous aloons rétablir l’ordre inital. Du coup il faut rajouter un peu de traitement d’erreurs...

<< 
   -> OLD NEW 
   << 
      IF 
         OLD TYPE 6  == NEW TYPE 6 == AND 
      THEN
         IFERR
            NEW RCL
         THEN
           DROP VARS
           IFERR 
              OLD RCL 
           THEN 
              DROP2 "Original does not exist !" DOERR
           ELSE
              NEW STO OLD PURGE
              1 OVER OLD POS 1 - SUB 
              IF 
                 DUP SIZE 0 >
              THEN
                 ORDER
              ELSE
                 DROP
              END
           END 
         ELSE
            DROP "Destination already exists !" DOERR
         END
      ELSE
         "Invalid argument types !" DOERR
      END
   >> 
>>

P.-S.

Il y a surement des améliorations possibles.... N’hésitez pas à me faire parvenir vos propositions !

Répondre à cet article