我想匹配头部与f不同的表达。
这有效
[In] !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
但不是这个
[In] MatchQ[t[3], x_ /; Head[x] != f]
[Out] False
为什么第二种解决方案不起作用?我怎样才能使它发挥作用?
答案 0 :(得分:14)
为什么这不起作用:您必须使用=!=
(UnsameQ
)而不是!=
(Unequal
)进行结构比较:
In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
通过评估这个原因可以看出原因:
In[22]:= Head[t[3]]!=f
Out[22]= t!=f
当双方的平等(或不平等)无法实现时,运营商==
(Equal
)和!=
(Unequal
)会对自己进行评估成立。这在符号环境中是有意义的。我更详细地考虑了这个主题here,其中还讨论了SameQ
和UnsameQ
。
还有更优雅的方式来表达相同的模式,这也将更有效,例如:
MatchQ[t[3],Except[_f]]