2010-10-03 12 views
7

Me gustaría extraer argumentos de instancias de desigualdad. Lo siguiente no funciona, ¿alguna idea de por qué y cómo solucionarlo?Patrón coincidencia de desigualdad

 
Inequality[1, Less, x, Less, 2] /. Inequality[a_, _, c_, _, e_] -> {a, c, e} 

Respuesta

8
Inequality[1,Less,x,Less,2] /. HoldPattern[Inequality[a_,_,b_,_,c_]] -> {a, b, c} 


Out: {1, x, 2} 
+0

Me pregunté por qué 'HoldPattern' es obligatorio y' Trace' revela por qué: 'Inequality [a _, _, b _, _, c_]' se convierte en 'Inequality [a_, _, c_] && Inequality [ c_, _, e_] '. Por lo tanto, ya no coincide con lo que esperabas. – rcollyer

+0

@rcollyer Sí, se evalúa un patrón. Pruebe este ejemplo ** MatchQ [a/b, _/_] // Trace ** –

+0

Eso me volvería loco durante horas tratando de que ese patrón funcione. – rcollyer

0

¿Por qué no utiliza el acceso estándar a la subexpresión?

expr = Inequality [1, Less, x, Less, 2]; {a, c, e} = {expr [[1]], expr [[3]], expr [[5]]};

+0

Debido a que tengo que sustituir todas las desigualdades con igualdades en algo como esto - http://pastebin.com/wN2ENmL6 –

1

Además, se puede hacer esto:

Desigualdad [1, Menos, x, menos, 2] /. literal @ Desigualdad [a_, _, c_, _, e_] -> {a, c, e}

ADL

Cuestiones relacionadas