Page 1 sur 1

variables libres, variables locales

Publié : mer. nov. 23, 2011 1:39 pm
par Alek
Bonjour,
Pour motiver ma question je me permets de presenter d'abord un petit exemple.
Voici une procedure qui etant donnee une liste L de nombres reels retourne la liste de coeffs
d'un polynome ayant pour les racines les elements de L:

rcf(L):={
local k,p;
p:=1;
for k in L do
p:=p*(x-k); // x est ici une variable gobale
end do;
return coeff(p);
}:;

Bien evidemment, pour que ca marche il faut que x soit une variable libre (et ca marche bien).
OK.
Mais si on declare x comme local dans la procedure (local k,p,x;) le polynome p vaut juste une constante (=le dernier coeff du polynome renvoye par la version "globale")
Apparemment x "local" se comporte differemment. Est-ce volontaire? Si oui, quel est le "principe" pour des variables locales "libres"? (on est encore en 0.9.4)

Merci par avance.

Re: variables libres, variables locales

Publié : mer. nov. 23, 2011 3:33 pm
par parisse
Les variables locales sont automatiquement assignees a la valeur 0.
On peut rendre une variable locale libre avec purge(x).
Vous pouvez aussi laisser le programme tel quel et ajouter global x; pour eviter le warning.

Re: variables libres, variables locales

Publié : mer. nov. 23, 2011 4:01 pm
par Alek
Merci pour une reponse rapide !
(En fait, je savais pour "global", mais un vieux reflexe (C, maple...) m'empechait de remarquer l'affectation automatique de x en local. )

Re: variables libres, variables locales

Publié : dim. nov. 27, 2011 6:56 pm
par alb
Une question connexe
Soit le programme:

Code : Tout sélectionner

essai():={
  local val;
  saisir("entrez les valeurs",val);val:=[val];
  retourne moyenne(val);
}
Si je fais
val:=1,2,3,4;essai()
et si je tape val dans la fenêtre de saisie la valeur de retour est bien entendu 0
Comment puis-je modifier le programme pour prendre en compte ce comportement d'utilisateur ?

Re: variables libres, variables locales

Publié : dim. nov. 27, 2011 8:55 pm
par Alek
Ceci n'est pas une reponse (desole), mais je ne modifierais pas...

Au contraire, j'adopterai ce meme exemple pour expliquer ce que c'est une variable locale (et l'affectation automatique...)
(dans ce but je changerai peut etre la derniere ligne: retourne moyenne(val), size(val); )

Re: variables libres, variables locales

Publié : dim. nov. 27, 2011 10:07 pm
par alb
J'ai essayé d'utiliser size ou type sans rien trouver de bien concluant
En revanche j'ai repensé à VARS qui donne la liste des noms des variables affectées
Voilà ce que je propose:

Code : Tout sélectionner

essai():={
  local val;
  si member('val',VARS) alors
    output("Attention vous ne pouvez pas taper val dans la fenêtre de saisie")
  fsi
  saisir("entrez les valeurs",val);val:=[val]
  si val==[0] alors
    afficher("Errare humanum est, perseverare diabolicum")
  fsi
  retourne moyenne(val)
}