25 | Maneras de aplicar funciones |
f[x] significa
“aplicar la funci
ón
f a
x”. En Wolfram Language, una forma alternativa de escribir lo mismo es
f@x.
f@x es lo mismo que
f[x]:
A menudo resulta conveniente usar
@ para escribir funciones en cadena:
El c
ódigo puede resultar m
ás f
ácil de leer evitando el uso de los corchetes, si se escribe:
Otra forma m
ás de escribir
f[x] en Wolfram Language es: como una
“coletilla
”, en la forma
x//f.
Aplique f “como coletilla” a x:
Puede tenerse una sucesión de “coletillas”:
Aqu
í las funciones se leen en el orden en que se van aplicando:
Una forma muy com
ún de usar
// es en la aplicaci
ón de
N (para fines de evaluaci
ón num
érica)
“como coletilla
”.
Aplique la evaluación numérica “como coletilla”:
A medida que se va trabajando con Wolfram Language, se acaba por usar todo el tiempo una notaci
ón muy poderosa, a saber,
/@, que significa
“aplicar a cada elemento
”.
Aplique f a cada elemento de una lista:
Normalmente, f se aplicaría a la lista misma:
Framed es una funci
ón que muestra un marco alrededor de algo.
Muestre x con un marco:
Si se aplica
Framed a una lista, simplemente se muestra enmarcada la lista completa.
Aplique
Framed a una lista completa:
@ hace exactamente lo mismo:
Ahora se usa
/@ para aplicar
Framed a cada elemento de la lista:
Esto trabaja de igual forma con cualquier otra funci
ón. Por ejemplo, aplicar la funci
ón
Hue separadamente a cada n
úmero de una lista.
/@ aplica
Hue separadamente a cada n
úmero en la lista:
Esto es lo que hace la
/@:
Lo mismo pasa con
Range, aunque ahora la salida es una lista de listas.
/@ aplica separadamente
Range a cada n
úmero, dando como resultado una lista de listas:
Aquí se ve la equivalencia, al escribir todo en detalle:
Si ahora se tiene una lista de listas,
/@ es lo que se necesitar
ía para efectuar una operaci
ón por separado en cada una de las sublistas.
Aplique
PieChart separadamente a cada una de las listas en una lista de listas:
La misma idea puede extenderse exactamente a muchas otras funciones.
Aplique
Length a cada elemento, para producir la longitud de cada sublista:
La aplicaci
ón de
Length a la lista completa simplemente dar
ía el n
úmero total de sublistas:
Aplique
Reverse a cada elemento, para producir tres listas diferentes, en orden inverso:
La aplicaci
ón de
Reverse a la lista completa pondr
ía sus elementos en orden inverso:
Como siempre, el uso de corchetes es exactamente equivalente:
Algunas de las funciones que realizan c
álculos son
listables, lo que significa que de manera autom
ática se aplican a los elementos de una lista.
N es listable, as
í que no es necesario el uso de
/@ para que se aplique a cada uno de los elementos de una lista:
Lo mismo ocurre con
Prime:
Una funci
ón tal como
Graphics decididamente no es listable.
Esto produce un sol gráfico con tres objetos:
Esto produce tres gr
áficos separados, donde
Graphics ha sido aplicada a cada objeto:
Al escribir
f/@{1,2,3}, Wolfram Language lo interpreta como
Map[f,{1,2,3}].
f/@x se lee usualmente como
“mapear
f sobre
x”.
Interpretaci
ón interna de
f/@{1, 2, 3}:
f@x | | equivalente a f[x] |
x//f | | equivalente a f[x] |
f/@{a,b,c} | | aplica f por separado a cada elemento de la lista |
Map[f,{a,b,c}] | | forma alternativa de /@ |
Framed[expr] | | enmarca algo |
25.1Use
/@ y
Range para reproducir el resultado de
Table[f[n], {n, 5}].
»
25.2Use
/@ dos veces para generar
Table[f[g[n]], {n, 10}].
»
25.3Use
// para crear
a[b[c[d[x]]]].
»
25.4Cree una lista de las letras del alfabeto (ingl
és), enmarcando cada una de ellas.
»
25.5Obtenga el negativo de color de la imagen de cada planeta, y dar la lista de los resultados.
»
25.6Use
/@ para dibujar mapas separados de cada uno de los pa
íses en el G5.
»
25.7Binarice cada una de las banderas de Europa y haga un collage con el resultado.
»
25.8Haga una lista de los colores dominantes en las im
ágenes de los planetas, poniendo en una columna los resultados para cada planeta.
»
25.9Encuentre el total de los n
úmeros de letra dados por
LetterNumber para las letras de la palabra
“wolfram
”.
»
¿Por qu
é no usar siempre
f@x en vez de
f[x]?
f@x es un buen equivalente de
f[x], pero el equivalente de
f[1+1] es
f@(1+1), y en este caso,
f[1+1] es m
ás corto y f
ácil de entender.
¿Por qu
é /@ se llama
Map?
Esto proviene de las matem
áticas. Dado un conjunto
{1, 2, 3},
f/@{1, 2, 3} puede verse como el mapeo de dicho conjunto en otro.
¿C
ómo se dice
"//" y
"/@"?
T
ípicamente,
“diagonal diagonal
” y
“diagonal arroba
”.
¿Cu
ándo hay que usar par
éntesis con
@,
// y
/@?
Esto est
á determinado por la
precedencia o
agrupamiento de operadores diferentes.
@ agrupa con mayor fuerza que
+, as
í que
f@1+1 significa
f[1]+1 y no
f@(1+1) o
f[1+1].
// agrupa con menos fuerza que
+, as
í que
1/2+1/3//N significa
(1/2+1/3)//N. En un cuaderno puede verse c
ómo est
án agrupadas las cosas haciendo clic repetidamente en la entrada y observando c
ómo se expande la selecci
ón.
- Hay muchas funciones que son “listables”, de tal modo que se mapean automáticamente en una lista.
- Range es listable, así que Range[{3, 4, 5}] es lo mismo que Range/@{3, 4, 5}.