Il peut être nécessaire pour certaines fonctions de renvoyer plus d'une seule valeur. C'est possible en renvoyant un vecteur de valeurs mais souvent il est pratique d'utiliser le passage d'une référence à une variable. Vous transmettez une référence vers une variable à une fonction et la fonction attribue des valeurs à la variable pour vous en utilisant un déréférencement. Ce n'est pas le seul usage que vous pouvez faire du passage par référence mais c'est son utilisation principale.
Lorsque vous utilisez des fonctions qui renvoient des valeurs à travers des références dans sa liste d'argument, il suffit de transmettre le nom de la variable précédée d'une esperluette. Par exemple, le code suivant calcule une valeur propre d'une matrice A
avec un vecteur propre initial pressenti x
et enregistre le vecteur propre calculé dans la variable appelée v
:
RayleighQuotientIteration (A,x,0.001,100,&v)
Les détails concernant le fonctionnement des références et leur syntaxe sont similaires à ceux du langage C. L'opérateur &
référence une variable et *
la déréférence. Les deux ne peuvent s'appliquer que sur un identifiant, par conséquent **a
n'est pas une expression légale en GEL.
Les références s'expliquent mieux par un exemple :
a=1; b=&a; *b=2;
Maintenant a
contient 2. Vous pouvez également référencer des fonctions :
function f(x) = x+1; t=&f; *t(3)
donne 4.