匹配头不同于某种模式
问题描述:
我想匹配头部不同于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
必须进行结构比较使用
=!=
(
UnsameQ
),而不是
!=
(
Unequal
)
运营商==
(Equal
)和!=
(Unequal
)确实评估自己,当事实的平等(或不平等)的双方无法建立。这在符号环境中很有意义。我更详细地考虑了该主题here,其中还讨论了SameQ
和UnsameQ
。
也有更优雅的方式来表达同样的模式,这将是更有效的为好,像这样的:
MatchQ[t[3],Except[_f]]
+1
+1除'[_f]' – Simon
相关SO问题:http://stackoverflow.com/questions/5286736/差异之间和在数学,http://stackoverflow.com/questions/5750623/using-position-correctly和http://stackoverflow.com/questions/6510289/testing-for-null-and-not- null-in-mathematica –