匹配头部不同于某些模式

sjd*_*jdh 5 wolfram-mathematica

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

这有效

[In]  !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
Run Code Online (Sandbox Code Playgroud)

但不是这个

 [In]  MatchQ[t[3], x_ /; Head[x] != f]
 [Out] False
Run Code Online (Sandbox Code Playgroud)

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

Leo*_*rin 14

为什么这不起作用:必须使用 =!= (UnsameQ)而不是!=(Unequal)进行结构比较:

In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
Run Code Online (Sandbox Code Playgroud)

通过评估这个原因可以看出原因:

In[22]:= Head[t[3]]!=f
Out[22]= t!=f
Run Code Online (Sandbox Code Playgroud)

当无法确定双方的平等(或不平等)的事实时,运营商==(Equal)和!=(Unequal)确实对自己进行评估.这在符号环境中是有意义的.我认为更详细这个主题在这里,在这里也SameQUnsameQ进行了讨论.

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

MatchQ[t[3],Except[_f]]
Run Code Online (Sandbox Code Playgroud)