Possible Duplicate:
Determine whether some expression contains a given symbol

Let's say I have some expression:

sample = {1, 1/q, f[m]}

And I want to check it if it has the symbol m in it.

My question: Is there a clean or fast way of checking if m is in the equation?

What I came up with so far:

Do[StringFreeQ[ToString[sample], "m"], {i, 300}] // AbsoluteTiming
(* {0.0120007, Null} *)


Do[(sample /. m -> Unique[]) === (sample /. m -> Unique[]), {i, 300}] // AbsoluteTiming
(* {0.0100005, Null} *)

These solutions work, but I feel like there might be a faster, functional way of doing this.


marked as duplicate by rm -rf Sep 27 '12 at 3:59

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • $\begingroup$ What about FreeQ? $\endgroup$ – Rojo Sep 27 '12 at 3:51
  • $\begingroup$ FreeQ - but thats too short for an answer ;-) $\endgroup$ – user21 Sep 27 '12 at 3:52
  • $\begingroup$ @Rojo Don't MemberQ and FreeQ only check on the first level? I checked this for MemberQ before. $\endgroup$ – VF1 Sep 27 '12 at 3:52
  • $\begingroup$ No, FreeQ checks all levels by default. Both can take a level specification anyway $\endgroup$ – Rojo Sep 27 '12 at 3:53
  • $\begingroup$ Counterexample: FreeQ[{1, 1/q, D[m, t]}, m] $\endgroup$ – VF1 Sep 27 '12 at 3:53

How about:

sample = {1, 1/q, ff[f[m]]};
FreeQ[sample, m]
(* False *)

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