MathGroup Archive 2006

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

Search the Archive

Re: Clarification re. Curiosity concerning transformation rules for List

  • To: mathgroup at
  • Subject: [mg70961] Re: [mg70947] Clarification re. Curiosity concerning transformation rules for List
  • From: "Chris Chiasson" <chris at>
  • Date: Fri, 3 Nov 2006 01:39:05 -0500 (EST)
  • References: <>

Your question was clear the last time. You could easily Block List,
and then its definitions and attributes would be yours to modify
inside the Block.

I am not aware of any function or scoping construct that would allow
you to keep the present definitions for List and append your own such
that all the rules would be active at the same time. (though I could
think of several uses for a scoping construct with this capability -
special message handling would be one application)

I guess the short answer to your question is: no.

A lot of stuff would probably break if List were to have that
definition assigned.

On 11/2/06, Andrew Moylan <andrew.j.moylan at> wrote:
> I recently wrote:
> ----
> Since the List symbol is locked, I am curious about the possibility (or
> otherwise) of giving definitions for which the left-hand-side of the
> transformation rule contains only the List symbol. Here's an arbitrary,
> explicit example:
> Is it possible to make a definition such that: any list of two
> identical elements evaluates to the empty list? E.g. {x_, x_} -> {}.
> I can't see any way this transformation rule can be added. It's not
> possible to modify the DownValues for List; and there are no
> first-level symbols to which an UpValue can be added. Does anyone have
> any ideas?
> ----
> I received some replies suggesting that I use my proposed rule
> {x_,x_}->{} in combination with ReplaceAll to effect the transformation
> on a case-by-case basis. However, I am interested in whether it is
> possible to add a _definition_ so that the rule is _always_ applied.
> I think I can clarify by way of an example:
> Unprotect[Power];
> Power[x_, x_] = 0;
> Now 4^3 evaluates to 64 as usual, but 4^4 evaluates to 0. However, the
> following fails because List has attribute Locked (as well as attribute
> Protected):
> Unprotect[List];
> This doesn't mean that transformation rules involving lists cannot ever
> be defined. We can use UpValues. For example:
> AppendTo[UpValues[hello], {hello, x_} -> 0]
> Now pairs with the symbol hello as their first element evaluate to
> zero: {hello, 1} evaluates to 0. But other lists are not affected: {1,
> 2} evaluates to {1, 2}.
> However, the only way it was possible to add that definition was by
> attaching it as an UpValue for hello. Since there are no symbols in the
> rule {x_,x_}->{} (except List, which is locked), is it possible to make
> this definition? Is there a "global" set of transformation rules,
> always applied, but not attached to any particular symbol?
> I hope this is clearer, instead of less clear ;-).
> Cheers,
> Andrew


  • Prev by Date: Re: Context
  • Next by Date: Re: Context
  • Previous by thread: Clarification re. Curiosity concerning transformation rules for List
  • Next by thread: Re: Clarification re. Curiosity concerning transformation rules for List