CAPÍTULO 5. ESCRITURA DE FUNCIONES
101
En este último caso, se ha eliminado la definición de
w
en el ambiente de
la función
ff()
, por ello, al no encontrar asociación posible en éste ambiente
que es el padre del ambiente de la función
MiFunc()
, procede hacia arriba en la
jerarquía, en este caso al ambiente global donde encuentra que
w
tiene un valor
de 5. Por eso, aquí el resultado es 15.
5.3. Contenido de los ambientes de las funciones
En el ejemplo que se presentó en la sección anterior, particularmente en el
caso ilustrado por la Fig. 5.3(B), el uso de la función
MiFunc()
está confinado al
interior de la función
ff()
, que es donde se definió. Al ser por sí mismo
MiFunc
,
el símbolo correspondiente a una variable, cuyo valor es una función en este
caso, el lenguaje R, tiene los mecanismos necesarios para revelar ese valor, o
sea el código de la función, fuera de la función misma donde se definió. Esto
permite usar las funciones definidas en el interior de alguna función, afuera
del código correspondiente a la función donde se han definido. En este caso,
las reglas de alcance, descritas previamente, juegan un papel muy importante.
Para ilustrar esto, se propone aquí la creación de una función constructora de
funciones, de la siguiente manera:
Construye.multiplicador
<-
function
(
n
) {
fff
<-
function
(
x
) {
n
*
x
}
fff
# Regresa como resultado la función creada
}
duplica
<-
Construye.multiplicador
(
2
)
triplica
<-
Construye.multiplicador
(
3
)
duplica
(
5
)
## [1] 10
triplica
(
5
)
## [1] 15
La función
fff()
tiene una variable libre, a saber,
n
. Para resolver el valor
de
n
, en el interior de
fff()
, el lenguaje busca en el ambiente padre, el ambien-
te de la función
Construye.multiplicador()
, en este caso. Al momento de
la ejecución,
n
, que es un argumento formal de
Construye.multiplicador()
,
toma consecutivamente los valores de 2 y 3, y esos son, respectivamente, los
valores que tomará la variable libre,
n
, al momento de construir las funciones
duplica()
y
triplica()
.