Para algunas funciones puede ser necesario devolver más de un valor. Esto se puede lograr al devolver un vector de valores, pero muchas veces resulta conveniente pasar una referencia a una variable. Puede pasar una referencia a una variable a una función, y la función fijará el valor, eliminando una referencia. Aunque éste es el principal uso de las referencias, no es el único.
Cuando se utilizan funciones que devuelven valores a través de referencias en la lista de argumentos, pase solo el nombre de la variable con un ampersand (&). Por ejemplo, el siguiente código calcula el valor propio de una matriz A
con un vector propio inicial indeterminado x
, y guarda el vector propio obtenido en la variable v
:
RayleighQuotientIteration (A,x,0.001,100,&v)
La manera como funcionan las referencias y la sintaxis que utilizan son similares al lenguaje C. El operador &
hace referencia a una variable y *
la elimina. Ambos pueden aplicarse sólo a un identificador, por lo que **a
no es una expresión legal en GEL.
Las referencias se pueden explicar mejor utilizando un ejemplo:
a=1; b=&a; *b=2;
ahora a
contiene el valor 2. También puede hacer referencia a funciones:
function f(x) = x+1; t=&f; *t(3)
devuelve el valor 4.