Re: operator overloading with UpValues (eg, for shifting graphics)
- To: mathgroup at smc.vnet.net
- Subject: [mg13637] Re: operator overloading with UpValues (eg, for shifting graphics)
- From: "Allan Hayes" <hay at haystack.demon.cc.uk>
- Date: Fri, 7 Aug 1998 08:41:19 +0100
- References: <6qbqkd$a67@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Daniel, >should the Listable-ness of >Plus have precedence over my UpValue for Line? Yes: attributes are used before rules. This is standard in the evaluation process. Leaving aside issues arrising from holding attributes we get (where x* = value of x) f[a,b,..] -> f*[a*,b*,..] -- (if f ia Flat use this) --> (if f ia Listable use this) --> ... Allan ------------------------------------------------------------- Allan Hayes Training and Consulting Leicester UK http://www.haystack.demon.co.uk hay at haystack.demon.co.uk voice: +44 (0)116 271 4198 fax: +44(0)116 271 8642 **************** Daniel Reeves wrote in message <6qbqkd$a67 at smc.vnet.net>... >I thought it would be nice to shift some graphics by just adding an x-y >pair. It seemed like this sort of thing should do that: > >Unprotect[Line]; >Line /: Line[pts_] + {x_,y_} := Line[pts+{x,y}] Protect[Line]; > >But it doesn't. The UpValue for Graphics doesn't get used. This does >work: > >Line /: Line[pts_] + shift[x_,y_] := Line[pts+{x,y}] > >but then I might as well just do this: > >shift[Line[pts_],{x_,y_}] := Line[pts+{x,y}] > >The idea is to be able to just say Line[...] + {x,y} and get a shifted >Line. > >Does anyone know a way to do that? >Also, if/why Mathematica is doing "the right thing" in defying my >expectations in the first example. Ie, should the Listable-ness of >Plus have precedence over my UpValue for Line? > >Thanks, >Daniel > >-- >Daniel Reeves dreeves at umich.edu >http://ai.eecs.umich.edu/people/dreeves > >"This isn't right. This isn't even wrong." > -- Wolfgang Pauli, on a paper submitted by a physicist colleague > >