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