Perchè questo non funziona: è necessario utilizzare =!=
(UnsameQ
), piuttosto che !=
(Unequal
) per confronti strutturali:
In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
La ragione può essere visto valutando questo:
In[22]:= Head[t[3]]!=f
Out[22]= t!=f
Gli operatori ==
(Equal
) e !=
(Unequal
) valuteranno se stessi, quando il fatto di uguaglianza (o disuguaglianza) del non è possibile stabilire due lati. Questo ha senso in un ambiente simbolico. Ho considerato questo argomento in maggior dettaglio here, dove sono discussi anche SameQ
e UnsameQ
.
ci sono anche modi più eleganti per esprimere lo stesso modello, che sarà più efficiente e, come questa:
MatchQ[t[3],Except[_f]]
fonte
2011-10-05 12:26:26
correlate SO domande: http://stackoverflow.com/questions/5286736/ differenza-tra-e-in-matematica, http://stackoverflow.com/questions/5750623/using-position-correctly e http://stackoverflow.com/questions/6510289/testing-for-null-and-not- null-in-mathematica –