2009-10-06 3 views
5

Esempio:In Mathematica, come posso trovare pattern che includono regole ed elenchi?

test = {"a" -> {{1}, 12}, "b" -> {13}} 

mi piacerebbe trovare tutte le espressioni nella lista con questo schema:

_ -> {_,_} 

Il primo elemento, "a" -> {{1}, 12}, è rappresentato da questo modello.

Tuttavia, nessuna di queste espressioni funziona:

Cases[test,_->{_,_}], Cases[test,_->_], Cases[test,Rule[_,_]], etc. 

Tutto il consiglio sarebbe apprezzato.

risposta

9

Quello che stai cercando è HoldPattern:

In[1]:= test = {"a" -> {{1}, 12}, "b" -> {13}}; 

In[2]:= Cases[test, HoldPattern[_ -> {_, _}]] // InputForm 
Out[2]= {"a" -> {{1}, 12}} 

EDIT: Questo funziona anche con le variabili del modello di nome.

In[3]:= Cases[test, HoldPattern[_ -> {x_, _}] :> x] 
Out[3]= {{1}} 
+0

Eccellente. Questo sembra essere quello che sto cercando. È possibile avere variabili di pattern con nome, ad es. _-> {_, _ x} /; x <10 durante l'utilizzo di HoldPattern? – Tony

+0

Eccellente! Top dawg. – Tony