Re: Sequence is funny !
- To: mathgroup at smc.vnet.net
- Subject: [mg8952] Re: [mg8852] Sequence is funny !
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Mon, 6 Oct 1997 01:59:20 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Gilles BARBIER <Gilles.Barbier at der.edfgdf.fr> [mg8852] Sequence is funny ! writes > For some people who like to understand the internal mechanism > of Mathematica, I give them this little problem a friend sent to me > : > Why Table[i,{i,Sequence[1,3]}] gives {1,2,3,4} instead of {1,2,3} > !! > That's not a bug, I even have an explanation,if you are interested. Giles, Very interesting. Before giving my own explanation here is another teaser: 1/Sequence[2,3,4,5] 2^3^2^(2/5) Now for Table[i,{i,Sequence[1,3]}]. Table[expr,{i,b}] evaluates as follows a) Find the number of entries required in the table: n = Floor[1+(b-1)] (Floor allows for b's like 7/2 and 7.8). b) Compute n entries starting from 1 and incrementing by 1: 1, 1+1, ,1+(n-1) The example Table[i,{i,Sequence[1,3]}] evaluates as follows. a) Since table has attribute HoldAll, Sequence[1,3] is passed into the calculation as b (Sequence is *not* stripped off immediately to give Table[ i,{i,1,3}] ). So we have n = Floor[1+(Sequence[1,3]-1)] -->Floor[1 + Plus[1,3,-1]] (*note this*) --> Floor[1+3] -->4 b) entries = 1, 2, 3, 4 NOTES: (1) More generally, Table[expr, {i,a,b,s}] evaluates as follows Find the number of entries required in the table: n = Floor[1+((b-a)/s)] Compute n entries starting from a incrementing by s: a, a+s, ,a+(n-1)s (default a is 1 and default s is 1) (2) We can show that HoldAll is crucial in the example: ClearAttributes[Table,HoldAll] Table[i,{i,Sequence[1,3]}] {1,2,3} Explanation: Table[i,{i,Sequence[1,3]}] is changed first to Table[i,{i,1,3}] . SetAttributes[Table,HoldAll] (*restore HoldAll*) (3) The use of parentheses is important in Floor[1+(Sequence[1,3]-1)] With them we have Floor[1+(Sequence[1,3]-1)] 4 but without them we get Floor[1+Sequence[1,3]-1] Floor::"argx": "\!\(Floor\) called with \!\(2\) arguments; 1 argument is expected." Floor[1,3] (4) We can follow the steps in all these calculations: On[] On::"trace": "\!\(On[]\) --> \!\(Null\)." Now evaluate the following: Floor[1+(Sequence[1,3]-1)] Table[i,{i,Sequence[1,3]}] Off[] Allan Hayes hay at haystack.demon.co.uk http://www.haystack.demon.co.uk/training.html voice:+44 (0)116 2714198 fax: +44 (0)116 2718642 Leicester, UK