An Elementary Introduction to the Wolfram Language
26Funciones puras anónimas
El uso de las funciones puras dará paso a un nuevo nivel de capacidades en Wolfram Language, y permitirá reformular algunas de las cosas que ya se han hecho de manera más simple y elegante.
Aplique Blur a cada una de las imágenes en la lista:
In[1]:=
Click for copyable input
Out[1]=
Ahora, supóngase que se quiere incluir el parámetro 5 en Blur. ¿Cómo hacerlo? La respuesta es usar una función pura.
Incluya un parámetro mediante la introducción de una función pura:
In[2]:=
Click for copyable input
Out[2]=
La borrosidad original, escrita en términos de una función pura:
In[3]:=
Click for copyable input
Out[3]=
El # es una ranura donde se coloca cada elemento. El & indica que lo que está escrito antes de él es una función pura.
Aquí se presenta en detalle el equivalente de Blur[#, 5]&/@... :
In[4]:=
Click for copyable input
Out[4]=
In[5]:=
Click for copyable input
Out[5]=
Tome una cadena de caracteres y hágala girar en diferentes ángulos:
In[6]:=
Click for copyable input
Out[6]=
In[7]:=
Click for copyable input
Out[7]=
In[8]:=
Click for copyable input
Out[8]=
In[9]:=
Click for copyable input
Out[9]=
In[10]:=
Click for copyable input
Out[10]=
Empareje los temas con sus resultados:
In[11]:=
Click for copyable input
Out[11]=
In[12]:=
Click for copyable input
Out[12]=
In[13]:=
Click for copyable input
Out[13]=
Esto es lo que la función pura haría al mapearse sobre {6, 8, 9}:
In[14]:=
Click for copyable input
Out[14]=
Vistos los anteriores ejemplos de las funciones puras en acción, se revisará, de manera más abstracta, lo que sucede.
Lo siguiente mapea una función pura abstracta sobre una lista:
In[15]:=
Click for copyable input
Out[15]=
A continuación, el ejemplo mínimo:
In[16]:=
Click for copyable input
Out[16]=
Eso es equivalente a:
In[17]:=
Click for copyable input
Out[17]=
Las ranuras se pueden colocar en cualquier parte de la función pura y tantas veces como se quiera. Todas ellas se llenarán con aquello a lo que se esté aplicando la función pura.
Se aplica ahora una función pura ligeramente más complicada:
In[18]:=
Click for copyable input
Out[18]=
In[19]:=
Click for copyable input
Out[19]=
El asunto es que se puede también reemplazar la f con una función pura. Entonces, la ranura que aparece en la función pura se llenará con el argumento al que se quiere aplicar.
Al aplicar una función pura a x, la ranura # se llena con x:
In[20]:=
Click for copyable input
Out[20]=
Una forma equivalente, escrita con @ en vez de [...]:
In[21]:=
Click for copyable input
Out[21]=
Ahora se puede ver lo que hace /@: simplemente aplica la función pura a cada elemento de la lista.
In[22]:=
Click for copyable input
Out[22]=
Lo mismo, pero escrito de manera más explícita:
In[23]:=
Click for copyable input
Out[23]=
¿Por qué es útil esto? Primero, porque es el fundamento de todo lo que las funciones puras hacen con /@. Pero, de hecho, a menudo es útil por sí mismo; por ejemplo, es una forma de evitar repeticiones.
Aquí está un ejemplo de una función pura donde aparece tres veces la #.
Aplique una función pura a Blend[{Red, Yellow}]:
In[24]:=
Click for copyable input
Out[24]=
In[25]:=
Click for copyable input
Out[25]=
En Wolfram Language, una función pura trabaja de la misma forma que cualquier otra cosa. Sin embargo, por sí sola, no hace nada.
Si se introduce una función pura por sí sola, regresará sin cambios:
In[26]:=
Click for copyable input
Out[26]=
Sin embargo, si se escribe con la función Map (/@) llevará a cabo un cálculo.
Map usa la función pura para efectuar un cálculo:
In[27]:=
Click for copyable input
Out[27]=
Se verán cada vez más usos de las funciones puras a lo largo de las próximas secciones.
código& una función pura
# ranura en una función pura
26.1Use Range y una función pura para crear una lista de los 20 primeros cuadrados. »
Salida esperada:
Out[]=
26.2Forme una lista con los resultados de mezclar el amarillo, el verde y el azul con el rojo. »
Salida esperada:
Out[]=
26.3Genere una lista de columnas enmarcadas que contengan las versiones mayúscula y minúscula de cada letra del alfabeto inglés. »
Salida esperada:
Out[]=
26.4Forme una lista de las letras del alfabeto inglés en colores aleatorios y enmarcadas con colores de trasfondo aleatorios. »
Muestra de salida esperada:
Out[]=
26.5Genere una lista de los países del G5 y sus banderas, acomodando el resultado en una rejilla totalmente enmarcada. »
Salida esperada:
Out[]=
26.6Construya una lista con las nubes de palabras de los artículos en Wikipedia sobre apple, peach y pear»
Muestra de salida esperada:
Out[]=
26.7Forme la lista de los histogramas de las longitudes de palabra de los artículos en Wikipedia sobre apple, peach y pear»
Muestra de salida esperada:
Out[]=
Salida esperada:
Out[]=
+26.1Escriba de una manera más simple (#^2+1&)/@Range[10]»
Salida esperada:
Out[]=
¿Por qué se les llama funciones puras?
Porque lo único que hacen es servir como funciones que se aplican a argumentos. También se les llama funciones anónimas porque, a diferencia de Blur, por ejemplo, no tienen un nombre. Se usan aquí ambos términos, como en funciones puras anónimas, para dar a entender los dos significados.
¿Por qué se necesita el &?
El & (ampersand) indica que lo que viene antes de él es el cuerpo de una función pura y no el nombre de una función. f/@{1, 2, 3} da {f[1], f[2], f[3]}, pero f&/@{1, 2, 3} da {f, f, f}.
¿Cómo se interpreta f[#, 1]& ?
Function[f[#, 1]]. En este caso Function se llama a veces la función función.
 
Download Notebook Version
en