Wolfram mathematica 与某些图案不同的匹配头

Wolfram mathematica 与某些图案不同的匹配头,wolfram-mathematica,Wolfram Mathematica,我想匹配谁的头不同于f的表达式 这很有效 [In] !MatchQ[t[3], x_ /; Head[x] == f] [Out] True 但不是这个 [In] MatchQ[t[3], x_ /; Head[x] != f] [Out] False 为什么第二种解决方案不起作用?如何使其工作?为什么不工作:您必须使用==(),而不是=()用于结构比较: In[18]:= MatchQ[t[3],x_/;Head[x]=!=f] Out[18]= True 通过评估,可以看出原因

我想匹配谁的头不同于f的表达式

这很有效

[In]  !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
但不是这个

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

为什么第二种解决方案不起作用?如何使其工作?

为什么不工作:您必须使用
==(),而不是
=()用于结构比较:

In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
通过评估,可以看出原因:

In[22]:= Head[t[3]]!=f
Out[22]= t!=f
运算符
==
Equal
)和
=
不平等
)对自己进行评估。这在符号环境中是有意义的。我更详细地考虑了这个主题,其中还讨论了
SameQ
UnsameQ

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

MatchQ[t[3],Except[_f]]
相关SO问题:,以及