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
)确实对自己进行评估.这在符号环境中是有意义的.我认为更详细这个主题在这里,在这里也SameQ
并UnsameQ
进行了讨论.
还有更优雅的方式来表达相同的模式,这也将更有效,例如:
MatchQ[t[3],Except[_f]]
Run Code Online (Sandbox Code Playgroud)