by Adriweb » 05 Oct 2013, 23:40
Sur MoHPC (
http://www.hpmuseum.org/cgi-sys/cgiwrap ... 111#252111 , lien qui ne sera plus valide d’ici quelques semaines à cause de leur système d’archivage), Cyrille de Brébisson, développeur HP qui a déjà posté ici sur TI-Planet, a posté une excellente explication du fonctionnement interne du mode numérique et du mode CAS en interaction. Nous la relayons ici, après traduction, car ça donne un éclairage sur certains comportements qui peuvent sembler inhabituels / peu naturels, et ça évite que chacun doive redécouvrir ces infos dans son coin

Voici comment les choses fonctionnent :
En mode numérique,
la plupart des fonctions sont insensibles à la casse, mais utilisent un affichage en majuscules.
Le "
parser" (analyseur) fait la distinction entre les noms complets ("My_Program.MyVariables") et ceux non qualifiés ("FOO")
L'ordre de priorité dans la résolution de nom pour un nom non-qualifié est le suivant:
- les noms des programmes localement connus (fonctions ou vars)
- fonctions et variables intégrées (certaines sont insensibles à la casse)
- les fonctions et les vars de l'application actuelle
- vars, fonctions exportées, et programmes mis en global
- Toutes les fonctions/variables standards de l'application, dont le nom n'est pas complet (nom non qualifié) (F1 par exemple. Voilà pourquoi, comme vous l'avez sans doute découvert, vous pouvez appeler F1 même si la fonction n'est pas de l'application actuelle)
- variables utilisateur (celles qui sont créées lorsque vous faites abc:=1 par exemple)
- CAS (fonctions et variables)
Avoir le CAS en 7ème position est utile, de la même façon qu'il est utile de permettre l'utilisation de F1 même si la fonction n'est pas l'application actuelle... Toutefois, c'est "dangereux" (surtout pour les utilisateurs avertis), car cela peut conduire à des résultats étranges quand utilisé dans des cas non triviaux, ou peut prêter à confusion, ou peut être redéfini...
Si vous voulez utiliser une commande CAS, le mieux est de l'écrire pleinement, donc en écrivant : CAS.nomDeLaFonction(params) ...
Notons que la plupart des fonctions numériques, avant d'être appelées, évalueront tous leurs paramètres.
Lorsque vous appelez une fonction du CAS à partir du mode numérique, les paramètres seront transformés en un objet CAS (non évalué), de sorte que le CAS va s'en débrouiller par la suite. Cela signifie toutefois que ces objets doivent être des objets valides en mode numériques... Si vous voulez appeler une fonction du CAS depuis le numérique et que les paramètres ne sont pas valides en numérique (tel que des variables indéfinies ou une matrice symbolique), vous devez utiliser CAS.fonction("paramètre") : le "paramètre" est une chaîne qui sera analysée par le mode CAS et non pas par le numérique, et les règles du CAS lui seront appliquées.
En règle générale, le CAS a accès à toutes les fonctions / variables du mode numérique, à l'exception des variables locales... En conséquence, et en tant qu'exception à la règle ci-dessus, les variables locales dans les paramètres des fonctions du CAS sont remplacées par leurs valeurs avant que le CAS soit appelé…