Re: Re: Variable amount of Buttons in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg92882] Re: [mg92851] Re: Variable amount of Buttons in Mathematica
- From: Fred Simons <f.h.simons at tue.nl>
- Date: Thu, 16 Oct 2008 05:07:27 -0400 (EDT)
- References: <gcscrf$8l3$1@smc.vnet.net> <gcv77d$ds9$1@smc.vnet.net> <200810150937.FAA11741@smc.vnet.net>
The problem discussed in this thread is caused by the HoldRest attribute of Button, and therefore is essentially the same as In[1]:= Table[Hold[n], {n,1,5}] Out[1]= {Hold[n],Hold[n],Hold[n],Hold[n],Hold[n]} returning a list of 5 elements Hold[n]. Since Hold does not evaluate its argument, we have to *substitute* values for n in Hold[n] rather than assigning values to n. Here is one solution (you might replace Hold with the Button you are interested in): In[2]:= Table[Hold[n] /. n->i, {i,1,5}] Out[2]= {Hold[1],Hold[2],Hold[3],Hold[4],Hold[5]} The With-solutions are based on the fact that in the evaluation of With[{n=something}, argument] the first step is *substitution* of the value something for n in the expression argument; despite the syntax no assignments are involved. In[3]:= Table[With[{n=n},Hold[n]], {n,1,5}] Out[3]= {Hold[1],Hold[2],Hold[3],Hold[4],Hold[5]} As can be seen from the syntaxcolouring, the second n in n=n is the counter of the Table command, while the first n is the vehicle that takes care of the substitution in the second argument of With. Still another construction, which I have not seen mentioned, and easier to understand than the With construction, is based on the fact that mapping also uses substitution: In[4]:= Hold[#]& /@ Range[5] Out[4]= {Hold[1],Hold[2],Hold[3],Hold[4],Hold[5]} A variant of this is In[5]:= Array[Hold[#]&, 5] Out[5]= {Hold[1],Hold[2],Hold[3],Hold[4],Hold[5]} Kind regards, Fred Simons Eindhoven University of Technology
- References:
- Re: Variable amount of Buttons in Mathematica
- From: magma <maderri2@gmail.com>
- Re: Variable amount of Buttons in Mathematica