CAPÍTULO 5. ESCRITURA DE FUNCIONES
98
Figura 5.2: Tipos de símbolos en el interior de una función
5.2.2. Reglas de alcance
La discusión precedente lleva ahora a considerar lo que se denomina reglas
de alcance, y que se refieren a la forma como el lenguaje resuelve la asociación
entre una variable o símbolo libre y su correspondiente valor.
En una función, una variable libre es aquella que no se ha
definido
en el có-
digo de la misma, en el sentido explicado al principio de la sección 5.2.1, y cuyo
valor, sin embargo, se solicita, al incluir su nombre o símbolo correspondiente,
típicamente en el lado derecho de una asignación
5
, como se muestra en la Fig.
5.2.
Para asociar las variables libres con un valor, R utiliza lo que se conoce como
alcance léxico
6
. En este tipo de alcance se establece que
los valores de las variables
se buscan en el ambiente en el cuál la función se definió
. Como se puede intuir de
lo dicho antes, un ambiente es una colección de pares <
símbolo, valor
>, donde,
por ejemplo, un símbolo podría ser
MiSimbolo
, y su valor
5
, o el símbolo
t
y
su valor el vector
<1,2,3>
. Ahora bien, en R los ambientes se organizan en una
jerarquía; esto es, cada ambiente tiene un ambiente padre y a su vez puede
tener cero o más hijos. El único ambiente que no tiene padre es el ambiente
vacío, que se encuentra en lo más alto de la jerarquía. Así pues, el lugar dónde R
buscará el valor de una variable libre, dependerá del lugar dónde se encuentre
escrito el código de la función en el que se hace referencia a ella. Tomemos,
por ejemplo, el caso de la función que se ha mostrado en la Fig. 5.2, y veamos
5
Por ejemplo, otro caso en el que esto puede ocurrir es si dentro de la función se llama a otra
función pasando como argumento una variable que no ha sido previamente definida.
6
El lenguaje S, o más bien su última versión, S-PLUS, usa lo que se conoce como
alcance estático
,
que consiste en resolver el problema de las variables libres, asociándolas siempre con los nombres
que aparecen en el ambiente global. La diferencia entre este tipo de alcance y el
alcance léxico
, que
es el que usa R, se puede apreciar en la explicación que aparece más delante en el texto.