¿Por qué esto no funciona: debe utilizar =!=
(UnsameQ
), en lugar de !=
(Unequal
) para las comparaciones estructurales:
In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
La razón se puede ver mediante la evaluación de esta:
In[22]:= Head[t[3]]!=f
Out[22]= t!=f
Los operadores ==
(Equal
) y !=
(Unequal
) se evalúan a sí mismos, cuando el hecho de la igualdad (o desigualdad) del dos lados no pueden ser establecidos. Esto tiene sentido en un entorno simbólico. Consideré este tema con más detalle en here, donde también se tratan SameQ
y UnsameQ
.
también hay formas más elegantes para expresar el mismo patrón, que será más eficiente, así, como este:
MatchQ[t[3],Except[_f]]
relacionados SO preguntas: http://stackoverflow.com/questions/5286736/ diferencia-entre-y-en-matemáticas, http://stackoverflow.com/questions/5750623/using-position-correctly y http://stackoverflow.com/questions/6510289/testing-for-null-and-not- null-in-mathematica –