MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Sequence as a universal UpValue

  • To: mathgroup at
  • Subject: [mg74632] Re: Sequence as a universal UpValue
  • From: "Szabolcs" <szhorvat at>
  • Date: Thu, 29 Mar 2007 02:29:32 -0500 (EST)
  • References: <euan47$dni$>

On Mar 27, 11:11 am, "Chris Chiasson" <chris at> wrote:
> In his presentation on working with held expressions at
> Villegas says:
> "In fact, Sequence itself could almost be implemented as a universal
> UpValue (maybe Dave Withoff or Roman Maeder remembers if that's not
> quite true)."
> So, I am wondering, does the following input disprove that Sequence
> can be implemented as a universal UpValue? How should I think of
> Sequence? Importantly, why doesn't blocking Sequence work like
> blocking the arbitrary symbol?

I'm not sure I understand completely how these things work, but the
behaviour of Block does seem to make sense if you read its help page.
It says:

" When you execute a block, values assigned to x, y, ... are cleared.
When the execution of the block is finished, the original values of
these symbols are restored. "

When you put blahblah in a Block, the definitions associated with it
are cleared, and
its arguments are not spliced into Map. You get the expected result.

But the definitions associated with Sequence are built-in, so they can
not be cleared.


Hmm ... Now that I experimented some more, Sequence does seem to be
special in this respect:


>From In[1]:=

>From In[1]:=

So built-in definitions can be cleared after all. But the Mathematica
book does mention that Sequence is treated in a special way (unlike
other built-ins). Check Section A.4.1 (Mathematica Reference Guide ->
Evaluation -> The Standard Evaluation Sequence).

> In[1]:=
> blahblah/:h_[l___,blahblah[blahblahArgs___],r___]=h[l,blahblahArgs,r]
> UpValues@blahblah
> a[1,blahblah[2,3]]
> Block[{Sequence},f/@Sequence[1,2,3]]
> Block[{blahblah},f/@blahblah[1,2,3]]
> Out[1]=
> h[l,blahblahArgs,r]
> Out[2]=
> {HoldPattern[h_[l___,blahblah[blahblahArgs___],r___]]\[RuleDelayed]
>     h[l,blahblahArgs,r]}
> Out[3]=
> a[1,2,3]
> Map::nonopt: Options expected (instead of 3) beyond position 3 in
> Map[f,1,2,3]. An option must be a rule or a list of rules.
> Out[4]=
> Map[f,1,2,3]
> Out[5]=
> blahblah[f[1],f[2],f[3]]
> Thanks for your input,
> --

  • Prev by Date: Re: Pattern evaluation depending on order of definitions
  • Next by Date: Re: Pattern evaluation depending on order of definitions
  • Previous by thread: Sequence as a universal UpValue
  • Next by thread: Re: Re: Sequence as a universal UpValue