Re: When is a List not a List?
- To: mathgroup at smc.vnet.net
- Subject: [mg90958] Re: When is a List not a List?
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Thu, 31 Jul 2008 06:04:38 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g6rntk$7kj$1@smc.vnet.net>
AES wrote: > g[x_, n_] := x^n > FullForm[Table[g[x, n], {n, 1, 2}]] > FullForm[{g[x, 1], g[x, 2]}] > Plot[{g[x, 1], g[x, 2]}, {x, 0, 1}, PlotStyle -> {Red, Blue}] > Plot[Table[g[x, n], {n, 1, 2}], {x, 0, 1}, PlotStyle -> {Red, Blue}] > > The FullForm[]s are identical. One Plot[] has red and blue curves; the > other has two blue curves. > > Quirky! Not at all, as it has already been explained many times in this very newsgroup (notwithstanding the online help that contains some examples illustrating this point). Plot does not evaluate immediately its arguments because it has the attribute HoldAll: Attributes[Plot] {HoldAll, Protected} So, having the attribute HoldHold, what Plot "sees" in first instance the unevaluated expression Table[g[x, n], {n, 1, 2}], which stands for only *one* function. Thus the choice of colors is just for one function/expression, not for the list of functions that will be returned after evaluation of the first argument. To force the evaluation of the first argument before doing anything else, one must use Evaluate, so Mathematica's main loop evaluates Table[g[x, n], {n, 1, 2}] to the list {g[x, 1], g[x, 2]} and feed Plot with this list as first argument. Then Plot is evaluated and "sees" a list of two function as its first argument and thus select two colors. As usual, Trace might be useful to have a glimpse at what's going on. Plot[Table[g[x, n], {n, 1, 2}], {x, 0, 1}, PlotStyle -> {Red, Blue}] // Trace {Plot[Table[g[x,n],{n,1,2}],{x,0,1},PlotStyle->{Red,Blue}], {x=.,Null},{x=.,Null},{{x}=.,{x=.},{x=.,Null},{Null}}, {Table[g[x,n],{n,1,2}],{{x,0.0000204286},{n,1}, g[0.0000204286,1],0.0000204286^1,0.0000204286}, [...] Plot[Evaluate@Table[g[x, n], {n, 1, 2}], {x, 0, 1}, PlotStyle -> {Red, Blue}] // Trace {{Table[g[x,n],{n,1,2}],{{n,1},g[x,1],x^1,x}, {{n,2},g[x,2],x^2},{x,x^2}}, Plot[{x,x^2},{x,0,1},PlotStyle->{Red,Blue}], [...] Regards, -- Jean-Marc