Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

While playing around with the solutions to this question, I've found some very strange behaviour:

==> False
==> True
==> True

So what's wrong with the first pattern? Or did I just find some bug?

share|improve this question
up vote 26 down vote accepted

Because PatternTest binds very tightly. You need extra parentheses:

MatchQ[3, _?(Composition[Not, OptionQ])]
share|improve this answer
Thanks. I should have thought of that possibility myself ... – celtschk Feb 13 '12 at 16:44
@celtschk This is not at all obvious - it binds stronger than a function call: a?f[b] // FullForm gives PatternTest[a,f][b], which is not something we are used to. I just happened to have been bitten by this a few times. The same story with the Function: have to wrap it in parentheses as well. I actually mentioned that in my answer to the question you linked. – Leonid Shifrin Feb 13 '12 at 16:46
This is one reason I tend to use Condition for anything that isn't completely trivial... – Brett Champion Feb 13 '12 at 16:46
@Brett I use PatternTest in this form with parentheses quite a bit as well, but I agree that there are less chances for errors with Condition. – Leonid Shifrin Feb 13 '12 at 16:50
It's unusual for something to have a higher precedence than [...] function call ... – Szabolcs Feb 13 '12 at 16:50

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.