Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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

Is there a command that takes an equation as an input and creates an output with a list of terms in the original equation? Something like:

Input: Foo[ (1+a) x+ (2.5-b) y^2+ 3 c z^{1.3}]

Output: { (1+a) x ,  (2.5-b) y^2 ,  3 c z^{1.3} }
share|improve this question
You can expand your equation and then apply List. – Spawn1701D May 16 '13 at 17:32
Variables, e.g. Variables[x^3 + 6 x^2 y + 3 x y z + x z^2 + 1] yields {x, y, z} – Artes May 16 '13 at 17:32
If you want monomials there is e.g. MonomialList[a x + b y^2 + 3 c z^{1.3}] yielding {{1. a x, 1. b y^2, 3. c z^(13/10)}} – Artes May 16 '13 at 17:38
Hi guys, thank you very much for your help so far. Unfortunately I have had to update the question as I try your suggestions and see what additional flexibility I else I need. – DJBunk May 16 '13 at 17:41
So you need List @@ ((1 + a) x + (2.5 - b) y^2 + 3 c z^1.3) returning {(1 + a) x, (2.5 - b) y^2, 3 c z^1.3} – Artes May 16 '13 at 17:44

What you are asking to do, it seems, is to replace the Plus Head, with the List Head. The Apply function, shorthanded as @@, will do what you want:

Input: expr = Foo[a + b + c];

Now we can get just the a+b+c with First:

Input: expr2 = First@expr;

Check out FullForm to get rid of shorthanded notation:

Input: FullForm[expr2]
Output: Plus[a,b,c]

And finally, we can turn Plus into List with Apply:

Input: List@@expr2
Output: {a,b,c}

All in one line:

Input: List@@First[Foo[a+b+c]]
share|improve this answer
I am fairly certain that Foo was given as the example of the function itself, meaning that Foo[a + b + c] should directly evaluate to {a, b, c}. Nevertheless +1. – Mr.Wizard Oct 8 '14 at 16:11

Examining the structure of the expression with TreeForm

TreeForm@Foo[(1 + a) x + (2.5 - b) y^2 + 3 c z^{1.3}]

TreeForm@Foo[(1 + a) x + (2.5 - b) y^2 + 3 c z^{1.3}]

shows us another way:

Level[Foo[(1 + a) x + (2.5 - b) y^2 + 3 c z^{1.3}], {3}]

(* {(1 + a) x, (2.5 - b) y^2, 3 c z^1.3} *)

(Simply count the depth of the function arguments from the Head of the expression.)

share|improve this answer

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.