2011-10-05 1 views
5

頭がfと違う表現にマッチさせたい。ある種のパターンとは違うマッチングヘッド

これは

[In] !MatchQ[t[3], x_ /; Head[x] == f] 
[Out] True 

に動作します。しかし、この

[In] MatchQ[t[3], x_ /; Head[x] != f] 
[Out] False 

はなぜ第2の解決策は動作しませんか?どうすればそれを動作させることができますか?

+1

質問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でのヌル –

答えて

14

なぜこれが動作しません:あなたは、構造の比較のためではなく!=よりも、(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と見なしました。ここでもSameQUnsameQが議論されています。

MatchQ[t[3],Except[_f]] 
+1

+1の 'Except [_f]' – Simon

関連する問題