2010-10-03 7 views

Répondre

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


Out: {1, x, 2} 
+0

Je me suis demandé pourquoi 'HoldPattern' est requis, et' Trace' révèle pourquoi: 'Inequality [a _, _, b _, _, c_]' devient 'Inequality [a_, _, c_] && Inequality [ c_, _, e_] '. Donc, il ne correspond plus à ce que vous attendez. – rcollyer

+0

@rcollyer Yep, un motif est évalué. Essayez cet exemple ** MatchQ [a/b, _/_] // Trace ** –

+0

Cela me rendrait fou pendant des heures en essayant de faire fonctionner ce modèle. – rcollyer

0

Pourquoi n'utilisez-vous pas l'accès standard à la sous-expression?

expr = Inégalité [1, Moins, x, Moins, 2]; {a, c, e} = {expr [[1]], expr [[3]], expr [[5]]};

+0

Parce que je dois remplacer toutes les inégalités avec égalités dans quelque chose comme ça - http://pastebin.com/wN2ENmL6 –

1

En outre, vous pouvez le faire:

inégalité [1, Moins, x, Moins, 2] /. littérales @ inégalité [a_, _, c_, _, e_] -> {a, c, e}

ADL

Questions connexes