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.
variables libres, variables locales
Modérateur : xcasadmin
variables libres, variables locales
Dernière modification par Alek le mer. nov. 23, 2011 6:52 pm, modifié 1 fois.
Re: variables libres, variables locales
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.
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
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. )
(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
Une question connexe
Soit le programme:
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 ?
Soit le programme:
Code : Tout sélectionner
essai():={
local val;
saisir("entrez les valeurs",val);val:=[val];
retourne moyenne(val);
}
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
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); )
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
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:
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)
}