An Elementary Introduction to the Wolfram Language
32Patrones
MatchQ comprueba si algo coincide con un patrón.
{a, x, b} coincide con el patrón {_, x, _}:
In[1]:=
Click for copyable input
Out[1]=
{a, b, c} no coincide, ya que tiene una b en medio, y no una x:
In[2]:=
Click for copyable input
Out[2]=
Cualquier lista que tenga dos elementos coincide con el patrón {_, _}:
In[3]:=
Click for copyable input
Out[3]=
Una lista que tenga tres elementos no coincide con el patrón {_, _}:
In[4]:=
Click for copyable input
Out[4]=
MatchQ sirve para cotejar cosas, una por una, con un patrón. Cases elige todos los elementos (casos) de una lista que coinciden con un patrón dado.
Encuentre todos los elementos que coinciden con el patrón {_, _}:
In[5]:=
Click for copyable input
Out[5]=
Encuentre todos los elementos que coinciden con {b, _} (o sea, casos de b seguido de algo):
In[6]:=
Click for copyable input
Out[6]=
Ahora se puede ver lo que sucede al cotejar cada elemento con {b, _}:
In[7]:=
Click for copyable input
Out[7]=
Si se usa Select para seleccionar coincidencias, se obtiene el mismo resultado que con Cases:
In[8]:=
Click for copyable input
Out[8]=
Encuentre todos los casos de cualquiera de a o b, seguido de algo:
In[9]:=
Click for copyable input
Out[9]=
Otro ejemplo: se crea una lista y luego se eligen los elementos que coinciden con patrones dados.
Cree una lista con los dígitos de los enteros en un tramo:
In[10]:=
Click for copyable input
Out[10]=
Encuentre los casos que terminen en 5:
In[11]:=
Click for copyable input
Out[11]=
Encuentre los casos que tengan en medio 1 o 2:
In[12]:=
Click for copyable input
Out[12]=
La notación __ (doble guion-bajo) en un patrón indica una secuencia cualquiera de cosas.
Encuentre los casos que consistan en una secuencia cualquiera que termine en b:
In[13]:=
Click for copyable input
Out[13]=
Encuentre las secuencias que terminen en a ó b, o que comiencen con c:
In[14]:=
Click for copyable input
Out[14]=
Los patrones no se usan solamente con listas: pueden involucrar cualquier cosa.
Eleja los casos que coinciden con el patrón f[_]:
In[15]:=
Click for copyable input
Out[15]=
Sustituya b con rojo (Red en inglés) en una lista:
In[16]:=
Click for copyable input
Out[16]=
In[17]:=
Click for copyable input
Out[17]=
Puede proporcionarse una lista de sustituciones:
In[18]:=
Click for copyable input
Out[18]=
El patrón _ guion-bajo coincide absolutamente con todo. Esto significa, por ejemplo, que {_,_} coincida con una lista cualquiera de dos elementos. Ahora bien, ¿cómo hacer si se quiere que ambos elementos sean iguales? En ese caso, se usa un patrón del tipo {x_,x_}.
{_, _} coincide con una lista que tenga dos elementos, donde estos sean iguales o no:
In[19]:=
Click for copyable input
Out[19]=
{x_, x_} coincide solamente con las listas de 2 elementos que sean idénticos:
In[20]:=
Click for copyable input
Out[20]=
x_ es ejemplo de un patrón denominado. Los patrones denominados son particularmente importantes en las sustituciones, pues con ellos se puede usar partes en lo que se quiere sustituir.
Use el patrón denominado x_ en una sustitución:
In[21]:=
Click for copyable input
Out[21]=
La forma ab se conoce generalmente como regla. Si x_ aparece en el lado izquierdo de una regla, entonces todo aquello que coincida con x_ se verá como x en el lado derecho.
Use x en el lado derecho de la regla para referirse a aquello que coincida con x_:
In[22]:=
Click for copyable input
Out[22]=
También se pueden usar reglas dentro de Cases.
Seleccione los elementos de la lista que coincidan con f[x_], y obtenga el resultado de sustituirlos por x+10:
In[23]:=
Click for copyable input
Out[23]=
Más adelante, se verá la importancia crucial de los patrones denominados cuando se usan en funciones definidas por el usuario en Wolfram Language.
_ patrón que representa cualquier cosa (guion-bajo)
__ patrón que representa cualquier secuencia (doble guion-bajo)
x_ patrón denominado x
a|b patrón que coincide con a o b
MatchQ[expr,patrón] comprueba si expr coincide con un patrón
Cases[lista,patrón] encuentra los casos donde aparece un patrón en una lista
lhsrhs regla que transforma lhs en rhs
expr/.lhsrhs sustituye lhs por rhs en expr
32.1Encuentre las listas de longitud 3 o más, que comiencen con 1 y terminen con 9, en IntegerDigits[Range[1000]]»
Salida esperada:
Out[]=
32.2Encuentre las listas con tres elementos idénticos en IntegerDigits[Range[1000]]»
Salida esperada:
Out[]=
32.3En las listas de los dígitos de los 1000 primeros cuadrados, encuentre las que comiencen con 9 y terminen con 0 o 1. »
Salida esperada:
Out[]=
32.4En IntegerDigits[Range[100]], sustituya todos los 0s por Gray y todos los 9s por Orange»
Salida esperada:
Out[]=
32.5Forme la lista de los dígitos de 2^1000, sustituyendo todos los ceros por rojo (Red en inglés). »
Salida esperada:
Out[]=
32.6Elimine las vocales a, e, i, o y u de la lista de los caracteres en The Wolfram Language»
Salida esperada:
Out[]=
32.7Encuentre una forma más simple para Select[IntegerDigits[2^1000], #0||#1&]»
Salida esperada:
Out[]=
32.8Encuentre una forma más simple para Select[IntegerDigits[Range[100, 999]], First[#]Last[#]&]»
Salida esperada:
Out[]=
No. Solo se pide que sean consistentes dentro de un patrón dado. Diferentes patrones pueden volver a usar los mismos nombres para otros propósitos, y el mismo nombre puede aparecer fuera del patrón.
¿Qué otras cosas se pueden usar en la definición de los patrones?
Se verán algunas en la Sección 41.
¿Qué diferencia existe entre | y ||?
p|q es una forma de patrón, que coincide con cualquiera de p y q. p||q es una forma lógica que comprueba si p o q es True.
Es la función ReplaceAll. Replace intenta sustituir una expresión completa. ReplaceList obtiene la lista de los resultados de todas las formas posibles de coincidir con un patrón dado.
Si /. tiene varias sustituciones, ¿cuál de ellas utilizará?
Usará la primera que sea válida. Si las sustituciones son válidas en varios niveles de una expresión, /. las usará en el nivel más externo.
 
Download Notebook Version
en