2010-10-03 3 views

ответ

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


Out: {1, x, 2} 
+0

Я задавался вопросом, почему требуется 'HoldPattern', а' Trace' показывает, почему: 'Неравенство [a _, _, b_, _, c_]' становится 'Неравенство [a_, _, c_] && Неравенство [ c_, _, e_] '. Таким образом, он больше не соответствует ожидаемому. – rcollyer

+0

@rcollyer Yep, оценивается шаблон. Попробуйте этот пример ** MatchQ [a/b, _/_] // Trace ** –

+0

Это будет часами сжимать меня, пытаясь заставить этот шаблон работать. – rcollyer

0

Почему вы не используете стандартный доступ к подвыражению?

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

+0

Потому что мне нужно, чтобы заменить все неравенства с равенствами в чем-то вроде этого - HTTP://pastebin.com/wN2ENmL6 –

1

Кроме того, вы можете сделать это:

неравенство [1, меньше, х, Меньше, 2] /. Буквальное @ неравенство [а_, _, c_, _, e_] -> {а, с, е}

ADL

Смежные вопросы