Page 1 sur 1

Une fonction qui renvoie une fonction

Publié : lun. déc. 07, 2009 10:33 am
par cdeval
Bonjour à tous (et à Bernard en particulier !)
Je définis une fonction par morceau, ça marche :

Code : Tout sélectionner

test():={
local f,t;
f(t):=ifte(t<3,t+1,6-2t);
return f;
}
:;
test()(1) revoie le bon résultat.

mais test()(t) renvoie : "Ifte: Unable to check test Error: Bad Argument Value"
et j'aimerais aussi faire :
assume(t<3)
test()(t) pour obtenir t-->6-2t

ceci pour mon cours sur les courbes B-spline avec mes BTS.
Merci de vos idées

Re: Une fonction qui renvoie une fonction

Publié : lun. déc. 07, 2009 4:38 pm
par parisse
Il y a un problème de masquage de l'hypothèse à cause de la variable de f qui est la même que la valeur de l'argument. Je ne vois pas comment le résoudre... Il faut donc utiliser un autre nom de variable. Ou alors remplacer ifte par when pour eviter l'erreur et évaluer la réponse.

Code : Tout sélectionner

test():={
local f,t;
f(t):=when(t<3,t+1,6-2t);
return f;
}:;
assume(t<3);
eval(test()(t))

Re: Une fonction qui renvoie une fonction

Publié : lun. déc. 07, 2009 10:11 pm
par cdeval
merci,
j'ai choisi l'option "changement du nom de variable" parce qu'avec when un appel du genre test()(t+1) donne le même résultat que test()(t)... alors que c'est bon avec ifte.
A+

Re: Une fonction qui renvoie une fonction

Publié : mar. déc. 08, 2009 7:49 am
par parisse
C'est parce que t ne doit pas etre declaree comme une variable locale, car c'est de fait une variable globale. Ou alors il faut la purger.

Code : Tout sélectionner

test():={
local f,t;
purge(t);
f(t):=when(t<3,t+1,6-2t);
return f;
}:;