# Can you form a list with elements which are terms from an equation?

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} }

• 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]]

• 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}] 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.)