Re: Clarification re. Curiosity concerning transformation rules for List

• To: mathgroup at smc.vnet.net
• Subject: [mg70981] Re: Clarification re. Curiosity concerning transformation rules for List
• From: dh <dh at metrohm.ch>
• Date: Fri, 3 Nov 2006 01:39:34 -0500 (EST)
• References: <eicn7e\$fts\$1@smc.vnet.net>

```Hi Andrew,
although I can not completely solve your problem, a partial solution
seems possible.
You could define UpValues for the data type(s) you are working with.
E.g. assume you are working with Real numbers:
Unprotect[Real];
Real /:{x_Real,x_Real}={};
now when you say: {1.,1.} you get {}, but {1.,2.} yields {1.,2.}
Daniel

Andrew Moylan 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: RE: Context headache
• Previous by thread: Re: Clarification re. Curiosity concerning transformation rules for List
• Next by thread: find roots