2010-10-03 4 views
7

Vorrei estrarre argomenti da casi di disuguaglianza. Di seguito non funziona, qualche idea del perché e come risolverlo?Pattern matching Inequality

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

risposta

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


Out: {1, x, 2} 
+0

Mi chiedevo perché fosse necessario 'HoldPattern', e' Trace' rivela perché: 'Diseguaglianza [a _, _, b _, _, c_]' diventa 'Disuguaglianza [a_, _, c_] && Disuguaglianza [ c_, _, e_] '. Quindi, non corrisponde più a quello che ti aspetti. – rcollyer

+0

@rcollyer Sì, viene valutato un modello. Prova questo esempio ** MatchQ [a/b, _/_] // Trace ** –

+0

Questo mi farebbe impazzire per ore cercando di far funzionare quel modello. – rcollyer

0

Perché non si utilizza l'accesso standard alla sottoespressione?

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

+0

Perché ho bisogno di sostituire tutte le disuguaglianze con uguaglianze in qualcosa di simile - http://pastebin.com/wN2ENmL6 –

1

Inoltre, si può fare questo:

disuguaglianza [1, Meno, x, Meno, 2] /. letterale @ disuguaglianza [a_, _, c_, _, e_] -> {a, c, e}

ADL