Re: When is a List not a List?
- To: mathgroup at smc.vnet.net
- Subject: [mg90977] Re: When is a List not a List?
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Fri, 1 Aug 2008 03:01:21 -0400 (EDT)
- References: <g6rntk$7kj$1@smc.vnet.net>
Hi, > 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. Plot has Attribute HoldAll, and: FullForm[Hold[Table[g[x, n], {n, 1, 2}]]] FullForm[Hold[{g[x, 1], g[x, 2]}]] are not the same expressions. This means that Plot sees the unevaluated expressions which are different and so there is no quirk in that it behaves differently when it sees a list. Of course one could argue that it could analyze the Table command and find out that that will evaluate to a two element list, but this is in general not possible without complete evaluation. E.g.: can you tell how many elements the following table will have without evaluating it?: Table[If[RandomReal[]<0.5,x^i,Unevaluated[Sequence[]]],{i,1,10}] so in these cases it will not try to be smart. If you explicitly tell Plot to evaluate: Plot[Evaluate[Table[g[x, n], {n, 1, 2}]], {x, 0, 1}, PlotStyle -> {Red, Blue}] or in Version 6 also: Plot[Table[g[x, n], {n, 1, 2}], {x, 0, 1}, PlotStyle -> {Red, Blue}, Evaluated -> True] a red and blue curve are shown because now Plot handles identical expressions (the evaluated ones that you have been looking at). I think you would find a lot less "bugs" and "quirks" if you would try to understand the basic mechanisms of how mathematica works. I always recommend to read the tutorials which are linked here (copy the following to the adress field within the documentation center): tutorial/EvaluationOfExpressionsOverview By reading I mean you definitly should take the time to evaluate the examples and experiment with them to make sure you get the point. hth, albert