An Elementary Introduction to the Wolfram Language
33Expresiones y su estructura
Las expresiones simbólicas son una manera muy general de representar una estructura, potencialmente con un significado asociado a esa estructura. f[x,y] es un ejemplo sencillo de expresión simbólica. Por sí misma, esta expresión simbólica no tiene asociado ningún significado en particular de modo que, al escribirla, Wolfram Language la regresará tal cual, sin cambios.
f[x, y] es una expresión simbólica sin ningún significado particular asociado:
In[1]:=
Click for copyable input
Out[1]=
La expresión simbólica List[x, y, z] se visualiza como {x, y, z}:
In[2]:=
Click for copyable input
Out[2]=
Frecuentemente, las expresiones simbólicas están anidadas:
In[3]:=
Click for copyable input
Out[3]=
FullForm muestra la forma interna de cualquier expresión simbólica.
In[4]:=
Click for copyable input
Out[4]//FullForm=
Graphics[Circle[{0,0}]] es otra expresión simbólica, que se muestra en pantalla como la imagen de un círculo. FullForm muestra su estructura interna.
Esta expresión simbólica se visualiza como un círculo:
In[5]:=
Click for copyable input
Out[5]=
FullForm muestra la estructura subyacente de esa expresión simbólica:
In[6]:=
Click for copyable input
Out[6]//FullForm=
A menudo sucede que las expresiones simbólicas no solo se muestran en pantalla de una manera especial, sino que, además, se evalúan y producen resultados.
In[7]:=
Click for copyable input
Out[7]=
Los elementos de la lista se evalúan, pero la lista misma sigue siendo simbólica:
In[8]:=
Click for copyable input
Out[8]=
He aquí la estructura de la lista como expresión simbólica:
In[9]:=
Click for copyable input
Out[9]//FullForm=
Esto es una expresión simbólica que, además, se evalúa:
In[10]:=
Click for copyable input
Out[10]=
Lo anterior podría escribirse de este modo:
In[11]:=
Click for copyable input
Out[11]=
Por ejemplo, x, y, f, Plus, Graphics y Table, son símbolos. Todo símbolo tiene un nombre único. En ocasiones, también lleva asociado un significado. A veces, también estará asociado con una evaluación. Y también puede ser parte de la definición de una estructura que usarán otras funciones. Pero no es necesario que sea nada de eso; simplemente debe tener un nombre.
En Wolfram Language, x puede simplemente ser x, sin que tenga que evaluarse como alguna otra cosa:
In[12]:=
Click for copyable input
Out[12]=
x no se evalúa, pero la suma se hace de todos modos, según las leyes del álgebra, en este caso:
In[13]:=
Click for copyable input
Out[13]=
Dados símbolos tales como x, y y f, se puede construir una infinidad de expresiones con ellos. Así, f[x], y f[y], y f[x,y]. Y también f[f[x]] o f[x,f[x,y]], o, para el caso, x[x][y,f[x]] o lo que sea.
Una expresión exhibida en forma de árbol:
In[14]:=
Click for copyable input
Out[14]//TreeForm=
Aquí se tiene una expresión sobre gráficos mostrada en forma de árbol:
In[15]:=
Click for copyable input
Out[15]//TreeForm=
Esto es equivalente a {x, y, z}[[2]], y extrae el segundo elemento de una lista:
In[16]:=
Click for copyable input
Out[16]=
La extracción de partes funciona de igual forma en la siguiente expresión:
In[17]:=
Click for copyable input
Out[17]=
Esto extrae el círculo del gráfico:
In[18]:=
Click for copyable input
Out[18]=
Y, de igual modo, se extraen a continuación las coordenadas de su centro:
In[19]:=
Click for copyable input
Out[19]=
Esto llega exactamente al mismo resultado:
In[20]:=
Click for copyable input
Out[20]=
El encabezado de una lista es List:
In[21]:=
Click for copyable input
Out[21]=
Toda parte de una expresión tiene un encabezado, incluyendo sus átomos.
El encabezado de un entero es Integer:
In[22]:=
Click for copyable input
Out[22]=
El encabezado de un número real aproximado es Real:
In[23]:=
Click for copyable input
Out[23]=
El encabezado de una cadena de caracteres es String:
In[24]:=
Click for copyable input
Out[24]=
In[25]:=
Click for copyable input
Out[25]=
Mediante el uso de los patrones se pueden buscar coincidencias de expresiones con encabezados dados. _Integer representa cualquier entero, _String cualquier cadena de caracteres y así sucesivamente.
_Integer es un patrón que coincide únicamente con objetos que tengan el encabezado Integer:
In[26]:=
Click for copyable input
Out[26]=
Los patrones denominados pueden también tener encabezados especificados:
In[27]:=
Click for copyable input
Out[27]=
In[28]:=
Click for copyable input
Out[28]//FullForm=
Al aplicar la función pura, esta aparece como encabezado:
In[29]:=
Click for copyable input
Out[29]=
Select aparece aquí como encabezado:
In[30]:=
Click for copyable input
Out[30]=
Tanto Cases como Select aparecen como encabezados en este ejemplo:
In[31]:=
Click for copyable input
Out[31]=
Length no pone atención en cuál sea el encabezado de una expresión; simplemente cuenta los argumentos:
In[32]:=
Click for copyable input
Out[32]=
/@ tampoco pone atención en cuál sea el encabezado de una expresión; simplemente aplica una función a sus argumentos:
In[33]:=
Click for copyable input
Out[33]=
Dado que hay muchas funciones que generan listas, resulta conveniente construir estructuras en forma de listas, aun si al final hay que sustituir las listas por otras funciones.
@@ sustituye el encabezado de la lista por f:
In[34]:=
Click for copyable input
Out[34]=
Esto da Plus[1, 1, 1, 1], lo que entonces se evalúa:
In[35]:=
Click for copyable input
Out[35]=
Esto convierte una lista en una regla:
In[36]:=
Click for copyable input
Out[36]=
Aquí se ve una alternativa más sencilla, sin hacer explícita la función pura:
In[37]:=
Click for copyable input
Out[37]=
Una situación insospechadamente común se da cuando se tiene una lista de listas, donde se quiere sustituir las listas interiores por alguna función. Eso puede efectuarse con @@ y /@. Sin embargo, @@@ es una forma directa y más conveniente para ese propósito.
Sustituya las listas interiores por f:
In[38]:=
Click for copyable input
Out[38]=
In[39]:=
Click for copyable input
Out[39]=
He aquí un ejemplo de cómo se puede utilizar @@@ para construir un grafo a partir de una lista de parejas.
Esto genera una lista de parejas de caracteres:
In[40]:=
Click for copyable input
Out[40]=
In[41]:=
Click for copyable input
Out[41]=
In[42]:=
Click for copyable input
Out[42]=
33.1Encuentre el encabezado de la salida de un ListPlot»
Salida esperada:
Out[]=
33.2Use @@ para calcular el resultado de multiplicar todos los enteros hasta el 100. »
Salida esperada:
Out[]=
33.3Use @@@ y Tuples para generar {f[a, a], f[a, b], f[b, a], f[b, b]}»
Salida esperada:
Out[]=
33.4Haga una lista con las formas de árbol de 4 aplicaciones sucesivas de #^#& comenzando con x»
Salida esperada:
Out[]=
33.5Encuentre los casos, sin repeticiones, para los que i^2/(j^2+1) es un entero, donde i y j toman valores hasta el 20. »
Salida esperada:
Out[]=
33.6Cree un grafo que conecte parejas sucesivas de números en Table[Mod[n^2+n, 100], {n, 100}]»
Salida esperada:
Out[]=
33.7Genere un grafo que muestre qué palabra sigue a cuál en las 200 primeras palabras del artículo en Wikipedia sobre computers»
Muestra de salida esperada:
Out[]=
33.8Encuentre una forma más simple para f@@#&/@{{1, 2}, {7, 2}, {5, 4}}»
Muestra de salida esperada:
Out[]=
f@@expr es Apply[f, expr]. f@@@expr es Apply[f, expr, {1}]. Por lo general, se leen como doble arroba y triple arroba.
En un nivel estructural, sí. Sin embargo, cuando se tienen variables con valores asignados (ver la Sección 38), se comportan más bien como grafos dirigidos. Y, por supuesto, se puede usar Graph para representar cualquier grafo como una expresión en Wolfram Language.
 
Download Notebook Version
en