An Elementary Introduction to the Wolfram Language
41Más información sobre los patrones
_ (guion-bajo) representa cualquier cosa. x_ (x guion-bajo) representa cualquier cosa, pero la denomina x. _h representa cualquier cosa que tenga encabezado h. Y, por último, x_h representa cualquier cosa que tenga encabezado h, y le da el nombre x.
Defina una función cuyo argumento sea un entero llamado n:
In[1]:=
Click for copyable input
La función se evalúa cuando el argumento es entero:
In[2]:=
Click for copyable input
Out[2]=
En ocasiones, se desea imponer alguna condición a un patrón. Para esto, se usa /; (diagonal punto y coma). n_Integer/;n>0 quiere decir cualquier entero mayor que 0.
De una definición que se aplique solo cuando n>0:
In[3]:=
Click for copyable input
La definición dada no se aplica a números negativos:
In[4]:=
Click for copyable input
Out[4]=
El /; puede ponerse donde sea, incluso al final de toda la definición.
Defina diferentes casos para la función check:
In[5]:=
Click for copyable input
In[6]:=
Click for copyable input
He aquí algunos ejemplos de la función check:
In[7]:=
Click for copyable input
Out[7]=
__ (doble guion-bajo) representa cualquier secuencia de uno o más argumentos. ___ (triple guion-bajo) representa cero o más.
Defina una función que busque negro y blanco (en ese orden) en una lista.
El patrón coincide con negro seguido de blanco, con cualquier elemento anterior a, entre, o después de ellos:
In[8]:=
Click for copyable input
In[9]:=
Click for copyable input
Out[9]=
Por defecto, __ y ___ eligen las coincidencias más cortas que funcionen. Puede usarse Longest para que elijan, en vez de eso, las más largas.
Especifique que la secuencia entre negro y blanco sea lo más larga posible:
In[10]:=
Click for copyable input
Ahora, m elige todos los elementos hasta el último blanco:
In[11]:=
Click for copyable input
Out[11]=
x|y|z indica las coincidencias con x, y o z. x.. coincide con cualquier número de repeticiones de x.
bwcut corta, en efecto, la secuencia más larga que contenga solo negro y blanco:
In[12]:=
Click for copyable input
In[13]:=
Click for copyable input
Out[13]=
El patrón x_ es, de hecho, la abreviatura de x:_, que significa coincide con cualquier cosa (o sea, _) y al resultado le llama x. También se puede usar la notación del tipo x: para patrones más complicados.
Forme un patrón denominado m que coincida con una lista de dos parejas:
In[14]:=
Click for copyable input
In[15]:=
Click for copyable input
Out[15]=
Denomine a la secuencia de negro y blanco, de modo que pueda usarse en el resultado:
In[16]:=
Click for copyable input
In[17]:=
Click for copyable input
Out[17]=
Sustituya los primeros elementos que no estén en orden por los que si lo estén:
In[18]:=
Click for copyable input
Out[18]=
In[19]:=
Click for copyable input
Out[19]=
Al comienzo, no se sabe cuántas iteraciones tardará en completar el ordenamiento de una lista dada. Así pues, lo mejor es usar FixedPointList, que es como NestList, salvo que no es necesario especificar el número de pasos y, en vez de eso, sigue hasta que el resultado llega a un punto fijo, donde ya no hay cambio.
In[20]:=
Click for copyable input
Out[20]=
In[21]:=
Click for copyable input
Out[21]=
ListLinePlot grafica cada lista en color diferente, mostrando como procede el ordenamiento:
In[22]:=
Click for copyable input
Out[22]=
He aquí el resultado para ordenar una lista aleatoria de longitud 20:
In[23]:=
Click for copyable input
Out[23]=
patt/;cond un patrón que coincide sujeto a una condición
___ un patrón para cualquier secuencia de cero o más elementos (triple guion-bajo)
patt .. un patrón para una o más repeticiones de patt
Longest[patt] un patrón que elige la secuencia más larga con la que coincide
FixedPointList[f,x] sigue anidando f hasta que el resultado ya no cambie
41.1Encuentre la lista de los dígitos de aquellos cuadrados de los números hasta 100 que contengan dígitos sucesivos repetidos. »
Salida esperada:
Out[]=
41.2En los primeros 100 números romanos, encuentre los que contengan L, I y X, en ese orden. »
Salida esperada:
Out[]=
41.3Defina una función que pruebe si una lista de enteros es igual a la misma, pero en orden inverso. »
No expected output
Many possible solutions of the form _:=_ or _=_
41.4En el artículo de Wikipedia sobre alliteration, encuentre la lista de las parejas de palabras sucesivas cuyas letras iniciales sean idénticas. »
Muestra de salida esperada:
Out[]=
41.5Use Grid para mostrar el proceso de ordenamiento dado en esta sección para {4, 5, 1, 3, 2}, donde los pasos sucesivos se presenten en forma vertical. »
Salida esperada:
Out[]=
41.6Use ArrayPlot para mostrar el proceso de ordenamiento visto en esta sección para una lista de longitud 50, donde los pasos sucesivos aparezcan en forma horizontal. »
Muestra de salida esperada:
Out[]=
Salida esperada:
Out[]=
Salida esperada:
Out[]=
41.9Defina combinadores usando las reglas s[x_][y_][z_]x[z][y[z]], k[x_][y_]x, y luego generar una lista empezando con s[s][k][s[s[s]][s]][s] y aplicando dichas reglas hasta que no haya cambios. »
Salida esperada:
Out[]=
41.10Elimine todos los ceros al final de la lista de dígitos de 100!»
Salida esperada:
Out[]=
Salida esperada:
Out[]=
Salida esperada:
Out[]=
¿Qué otras funciones que trabajen con patrones hay en Wolfram Language?
Except[patt] coincide con cualquier cosa, excepto patt. PatternSequence[patt] coincide con una secuencia de argumentos en una función. OrderlessPatternSequence[patt] coincide con dichos argumentos sin importar el orden. f[x_:v] define a v como valor por defecto, así que en f[ ], x se toma como v.
¿Cómo pueden verse todas las formas en que un patrón podría coincidir con una expresión dada?
Use ReplaceList. Replace obtiene la primera coincidencia; ReplaceList obtiene la lista de todas ellas.
¿Qué hace FixedPointList cuando no hay un punto fijo?
En algún momento se detendrá. Existe, además, una opción para fijar qué tan lejos debe llegar. FixedPointList[f, x, n] se detiene después de un máximo de n pasos.
 
Download Notebook Version
en