匹配头部不同于某些模式

时间:2011-10-05 12:21:36

标签: wolfram-mathematica

我想匹配头部与f不同的表达。

这有效

[In]  !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True

但不是这个

 [In]  MatchQ[t[3], x_ /; Head[x] != f]
 [Out] False

为什么第二种解决方案不起作用?我怎样才能使它发挥作用?

1 个答案:

答案 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,其中还讨论了SameQUnsameQ

还有更优雅的方式来表达相同的模式,这也将更有效,例如:

MatchQ[t[3],Except[_f]]