Merci beaucoup pour votre réponse.
En effet je ne suis pas habitué à manipuler les portées dynamiques.
Je viens de comprendre que, lorsque je rentre les lignes

patate(x,y):=ev(args(__)[2],eval)$
patate(f(x),x);

Maxima pose patate(x=f(x),y=x)
alors effectivement je comprends pourquoi il renvoie f(f(x)), avec l'effet de l'option eval qui demande deux évaluations successives...

Cela m'oblige à nommer les variables de mes fonctions avec des noms compliqués, pour être certain que je ne les rencontrerai pas plus loin dans le programme, mais cela nuit à la lisibilité du code.

N'y a-t-il pas une astuce qui permet de contourner ce problème ?

Cordialement,

Samuel Amo

2010/6/1 Stavros Macrakis <macrakis@alum.mit.edu>
A la difference de la plupart des langages modernes, Maxima utilise les portées dynamiques, non pas lexicales.

            -s

2010/6/1 Samuel Amo <samuel.amo@gmail.com>
Bonjour,

je voudrais savoir s'il est normal que lorsque je tape

patate(x,y):=ev(args(__)[2],eval)$
patate(f(x),x);
 
cela renvoie f(f(x))  ??

Je m'attendrais (et j'attendais !) que cela me renvoie x, ou son évaluation.
(Mais en l'occurence x ne contenait aucune valeur ni fonction.)

Par contre le probleme semble disparaitre si je tape

patate(u,y):=ev(args(__)[2],eval)$
patate(f(x),x);

(cela renvoie bien x)

N'est-ce pas révélateur d'un bug de localité de la variable ??
Il est plus probable qu'il y a quelque chose que je n'ai pas compris dans le système maxima
(je m'y suis mis il y a seulement quelques mois).
Quelqu'un pourrait-il m'éclairer ?

Cordialement,

Samuel Amo

------------------------------------------------------------------------------


_______________________________________________
Maxima-lang-fr mailing list
Maxima-lang-fr@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/maxima-lang-fr