/* Funzioni e loro uso */ /* */ depends(U,[x,y,z]); derivabbrev:true; lgmia(a,x,y,z):= block( [r],r: a/(x*x+y*y+z*z),ratsimp(matrix ( [ 1/(1-a), 0,0,0 ], [ 0,-1+r*x^2,r*x*y, r*x*z ], [ 0,r*x*y,-1+r*y^2,r*y*z ], [ 0,r*x*z,r*y*z,-1+r*z^2]))); lg:lgmia(U,px,py,pz); ug:ratsimp(invert(lg)); uug:ratsimp(lgmia(U/(U-1),px,py,pz)); uug-ug; ratsimp(diff(ug,x)); /* Mostro che le variabili esterne non vengono modificate se sono definite anche come variabili interne al blocco. */ y:100; f(x):= block([y],y:x*x,y+7); f(3); y; /* Qui assegno alla variabile interna il valore posseduto dalla omonima esterna... Ma l'esterna rimane immutata. */ g(x):=block([y:y],y:y+x^2,y); g(2); y; /* Ecco un' altra funzione che genera una matrice usando simboli già usati esternamente, ma senza alterarli. */ gm(x):= block([y,z:y],y:matrix([z*z+x*x,-1],[-1,z*z+2]), invert(y)); gm(1); y;