Los
patrones son un concepto fundamental en Wolfram Language. El patr
ón
_ (
“guion-bajo
”) representa cualquier cosa.
MatchQ comprueba si algo coincide con un patr
ón.
{a, x, b} coincide con el patr
ón
{_, x, _}:
{a, b, c} no coincide, ya que tiene una b en medio, y no una x:
Cualquier lista que tenga dos elementos coincide con el patr
ón
{_, _}:
Una lista que tenga tres elementos no coincide con el patr
ón
{_, _}:
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
{_, _}:
Encuentre todos los elementos que coinciden con
{b, _} (o sea, casos de
b seguido de algo):
Ahora se puede ver lo que sucede al cotejar cada elemento con
{b, _}:
Si se usa
Select para seleccionar coincidencias, se obtiene el mismo resultado que con
Cases:
En un patr
ón,
a|b indica
“cualquiera de a o b
”.
Encuentre todos los casos de cualquiera de a o b, seguido de algo:
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:
Encuentre los casos que terminen en 5:
Encuentre los casos que tengan en medio 1 o 2:
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:
Encuentre las secuencias que terminen en a ó b, o que comiencen con c:
Los patrones no se usan solamente con listas: pueden involucrar cualquier cosa.
Eleja los casos que coinciden con el patr
ón
f[_]:
Entre los muchos usos de los patrones est
á la definici
ón de sustituciones.
/. (
“diagonal punto
”) efect
úa una sustituci
ón.
Sustituya todas las instancias de listas de 2 elementos que comiencen con 1:
Puede proporcionarse una lista de sustituciones:
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:
{x_, x_} coincide solamente con las listas de 2 elementos que sean id
énticos:
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:
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_:
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:
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]].
»
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.
»
32.5Forme la lista de los d
ígitos de 2^1000, sustituyendo todos los ceros por rojo (
Red en inglés).
»
32.6Elimine las vocales a, e, i, o y u de la lista de los caracteres en
“The Wolfram Language
”.
»
¿Son importantes los nombres de las variables en patrones (
x_, etc.)?
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?
¿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.
Como
“a o b
” o bien como
“a barra vertical b
”.
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.
- Los patrones para cadenas de caracteres se tratan en la Sección 42.
- En Wolfram Language, la coincidencia de patrones toma en cuenta los hechos tales como la equivalencia de x+y y y+x, o x+(y+z) y (x+y)+z. Vea la Sección 41.
- Al escribir lhsrhs, la lhs significa “lado izquierdo” y la rhs “lado derecho”.
- Los patrones son formas con ámbito de alcance, en el sentido de que localizan nombres solamente dentro del ámbito del patrón, tales como la x en x_ .
- En el caso poco frecuente de que /. venga seguido de un dígito (como 0), hay que dejar un espacio en blanco antes del dígito, a fin de evitar la confusión con una división.