Les expressions comme (x+y+z) et (xì yì z) sont
représentées en interne sous la forme (x+y)+z et
(xì y)ì z. Ceci affecte les valeurs retournées pour
le premier et le deuxième argument. Il existe des
raisons techniques pour lesquelles
retourne y+x au lieu de x+y.
De même, xù yù z est représentée en interne sous
la forme (xù y)ù z. Là encore, il existe des raisons
techniques pour lesquelles le premier le premier
argument retourné est y*x et non x*y.
Lorsque vous extrayez des sous-expressions d'une
matrice, n'oubliez pas que les matrices sont
stockées sous forme de listes de listes, comme
illustré par l'exemple sur la droite.
L'exemple de fonction ci-contre utilise getType()
et part() afin de définir une fonction de
dérivation formelle. Cette fonction est incomplète
mais peut être enrichie pour dériver d'autres
fonctions comme par exemples les fonctions de
Bessel.
PassErr
Traitement des erreurs. Voir chap. VII et chap. 34, manuel CD.
Pause
Instruction d'entrée/sortie. Voir chap. VII et chap. 33, manuel CD.
Structure de contrôle. Voir chap. VII et chap. 34, manuel CD.
940
part(x+y+z) ¸
part(x+y+z,2) ¸
part(x+y+z,1) ¸
x+y+z,1
part(
)
part(xù yù z) ¸
part(xù yù z,2) ¸
part(xù yù z,1) ¸
part([a,b,c;x,y,z],0) ¸
part([a,b,c;x,y,z]) ¸
part([a,b,c;x,y,z],2)! temp ¸
part(temp,0) ¸
part(temp) ¸
part(temp,3) ¸
delVar temp ¸
:d(y,x)
:Func
:Local f
:If getType(y)="VAR"
: Return when(y=x,1,0,0)
:If part(y)=0
: Return 0 ¦ y=p,ˆ,
:part(y,0)! f
:If f="L" ¦ if negate
: Return ë d(part(y,1),x)
:If f=" − " ¦ if minus
: Return d(part(y,1),x)
ì d(part(y,2),x)
:If f="+"
: Return d(part(y,1),x)
+d(part(y,2),x)
:If f="ù "
: Return part(y,1)ù d(part(y,2),x)
+part(y,2)ù d(part(y,1),x)
:If f="{"
: Return seq(d(part(y,k),x),
k,1,part(y))
:Return undef
:EndFunc
Annexe A : Instructions et fonctions
2
z
y+x
2
z
yøx
"{"
2
{x y z}
"{"
3
z
Done
,numbers
i
PassErr
Pause