我想匹配头部与 f 不同的表达式。
这有效
[In] !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
但不是这个
[In] MatchQ[t[3], x_ /; Head[x] != f]
[Out] False
为什么第二种解决方案不起作用?我怎样才能让它工作?
最佳答案
为什么这不起作用:您必须使用 =!=
( 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]]
关于wolfram-mathematica - 与某些图案不同的匹配头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661235/