Re: Table/Evaluate
- To: mathgroup at smc.vnet.net
- Subject: [mg30642] Re: [mg30627] Table/Evaluate
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Sat, 1 Sep 2001 01:08:14 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
All of your examples reduce to two simple facts. If a function f has the attribute HoldFirst or HoldAll and g does not have then f[Evaluate[a]] will evaluate a before applying f but f[g[Evaluate[a]] will apply f without evaluating its argument. In other words, Evaluate only has any effect if it appears as the Head of an argument that would otherwise be held. In your case Table has the attribute HoldAll. So Table[Evaluate[p], {p, 4}] evaluates p before applying Table, hence p becomes 10 etc. Table[{Evaluate[p]}, {p, 4}] is of course Table[List[Evaluate[p]],{p,4}] . Since Evaluate is now hidden to Table (the head of the first argument is List) the argument of Table is not evaluated and the evaluation proceeds as usual. Table[Evaluate[{p}], {p, 4}] This time again Table can see Evaluate so it evaluates its argument first. Table[Evaluate[{p}] // Flatten, {p, 4}] This is just Table[Flatten[Evaluate[{p}]] , {p, 4}] so again Table can't see Evaluate as the Head of the first argument is Flatten. Andrzej Kozlowski Toyama International University JAPAN http://platon.c.u-tokyo.ac.jp/andrzej/ On Saturday, September 1, 2001, at 08:58 AM, Bernd Brandt wrote: > Dear group, > > With Table and Evaluate i found some things i did not expect. > I would like to know if someone understands this behaviour exemplified > below. > > Regards, > Bernd > > > p=10; > > Table[Evaluate[p], {p, 4}] > { 10, 10, 10} > > Table[{Evaluate[p]}, {p, 4}] > {{1}, {2}, {3}, {4}} > > > Table[Evaluate[{p}], {p, 4}] > {{10}, {10}, {10}, {10}} > > Table[Evaluate[{p}] // Flatten, {p, 4}] > {{1}, {2}, {3}, {4}} > >