頭がfと違う表現にマッチさせたい。ある種のパターンとは違うマッチングヘッド
これは
[In] !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
に動作します。しかし、この
[In] MatchQ[t[3], x_ /; Head[x] != f]
[Out] False
はなぜ第2の解決策は動作しませんか?どうすればそれを動作させることができますか?
頭がfと違う表現にマッチさせたい。ある種のパターンとは違うマッチングヘッド
これは
[In] !MatchQ[t[3], x_ /; Head[x] == f]
[Out] True
に動作します。しかし、この
[In] MatchQ[t[3], x_ /; Head[x] != f]
[Out] False
はなぜ第2の解決策は動作しませんか?どうすればそれを動作させることができますか?
なぜこれが動作しません:あなたは、構造の比較のためではなく!=
よりも、(Unequal
)を=!=
(UnsameQ
)を使用する必要があります。
In[18]:= MatchQ[t[3],x_/;Head[x]=!=f]
Out[18]= True
理由は、これを評価することで見ることができます。
In[22]:= Head[t[3]]!=f
Out[22]= t!=f
オペレータ==
(Equal
)と!=
(Unequal
)は、それらが等しいかどうか2つの側面を確立することはできません。これは象徴的な環境で理にかなっています。私はこのトピックをより具体的にはhereと見なしました。ここでもSameQ
とUnsameQ
が議論されています。
MatchQ[t[3],Except[_f]]
+1の 'Except [_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- Mathematicaでのヌル –