2011-06-23 14 views
7

Estoy buscando un patrón que coincida con una lista (posiblemente vacía) que consta de objetos atómicos idénticos (en el sentido de Equal []), pero no puedo entenderlo. Cualquier ayuda sería muy apreciada.Patrón para que coincida con la lista de elementos idénticos

+0

Por patrón, ¿te refieres a la expresión regular? – Dan

+0

¿Ha intentado utilizar una PatternSequence? http://reference.wolfram.com/mathematica/ref/PatternSequence.html –

+1

@Dan I Mathematica tiene _patterns_, es decir, expresiones para hacer coincidir construcciones de lenguaje/datos de Mathematica, y 'StringExpression's y' RegularExpression's para _strings_ . Rojizo parece referirse a patrones. –

Respuesta

12

Todas las respuestas por lo que parece mucho a No cumplió con el requisito de que los objetos coincidentes deben ser atomic. A continuación se hace esto:

Cases[testList, {a___?AtomQ} /; Equal[a]] 

Si no se define idénticos en el sentido de Equal se podría haber utilizado:

Cases[testList, {(a_?AtomQ) ...}] 

Con una lista de pruebas ligeramente modificada verá otros métodos fallar el requisito

testList = {{1, 1.0, 1.0}, {a, b, c}, {Exp[Pi] + 1, Exp[Pi] + 1, Exp[Pi] + 1}, {}, {3}}; 

todos ellos coinciden incorrectamente con el 3er elemento también.

+0

+1 para leer con cuidado :) –

+0

Vaya. Sí, me perdí completamente eso. –

+0

Gracias, sus tres versiones con comportamiento de coincidencia sutilmente diferente son muy instructivas. – reddish

9

¿Esto funciona para usted?

testList = { 
    {1, 1.0, 1.}, 
    {a, b, c}, 
    {0, Exp[Pi*I] + 1.0, Sin[Pi]} 
} 
Cases[testList, _List?(Equal @@ # &)] 
+0

No sé por qué, pero suelo olvidar la sintaxis '_? (Cond)'. Buen ejemplo para recordarlo. –

6

Usando Condition, en lugar de PatternTest:

In[31]:= testList = {{1, 1.0, 1.}, {a, b, c}, {0, Exp[Pi*I] + 1.0, 
    Sin[Pi]}, {}, {3}}; 

Cases[testList, {a___} /; Equal[a]] 

Out[32]= {{1, 1., 1.}, {0, 0., 0}, {}, {3}} 

(y la ampliación de la lista de casos de prueba de Mark para cubrir listas vacías y únicos.)

Cuestiones relacionadas