Re: Variables in Iterator limits?
- To: mathgroup at smc.vnet.net
- Subject: [mg109640] Re: Variables in Iterator limits?
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Sun, 9 May 2010 07:51:09 -0400 (EDT)
Hi, The explanation of the behavior you observed is straightforward and requires only a general understanding of Mathematica evaluation, nothing specifically tied to this particular situation: in the second case, since you apply the rule much later than Table is evaluated (and this follows from the standard evaluation sequence), then at the time Table executes it sees kmax as a symbolic parameter, and issues an error message. One way to avoid this problem (this is what I would do anyway): Clear[lines]; lines[kmax_] := Graphics[Table[ Line[{{k 10/kmax, -1}, {k 10/kmax, 1}}], {k, 1, kmax}]]; Show[lines[30]] In this case, the problem is avoided because passed parameters are "injected" in the body of the function before evaluation of the body. Another one (which minimally modifies your code): Clear[lines, kmax]; lines := Graphics[ Table[Line[{{k 10/kmax, -1}, {k 10/kmax, 1}}], {k, 1, kmax}]]; testValues = {kmax -> 30}; Block[{Table}, Show[lines] /. testValues] In this case, the problem is avoided because by Block-ing Table we delay its evaluation until the very end, and by that time kmax get substituted according to your rule. Hope this helps. Regards, Leonid On Sat, May 8, 2010 at 4:05 AM, AES <siegman at stanford.edu> wrote: > If I execute the following lines, I get the graphic that I want: > > x; Remove["Global`*"]; > > lines := Graphics[ Table[ Line[{{k 10/kmax,-1}, > {k 10/kmax,1}}], {k,1,kmax}]] > > km = 30; Show[lines] > > If I execute the following lines, I get exactly the same graphic, all OK, > > x; Remove["Global`*"]; > > lines := Graphics[ Table[ Line[{{k 10/kmax,-1}, > {k 10/kmax,1}}], {k,1,kmax}]] > > testValues = {kmax->30}; Show[lines] /. testValues > > -- except that I also get a beep, and an error msg in the Messages > window: > > "Iterator {k,1,kmax} does not have appropriate bounds" > > (but no little red square in the graphics output cell). > > Same thing happens in the /. case if I do the two tests in reverse order. > > Seems like another annoying little Mathematica "gotcha" to me . . . ? > >