Re: Setting upvalues, using ^:=, such that they get actually used

• To: mathgroup at smc.vnet.net
• Subject: [mg96453] Re: Setting upvalues, using ^:=, such that they get actually used
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Fri, 13 Feb 2009 03:49:28 -0500 (EST)
• Organization: The Open University, Milton Keynes, UK
• References: <gn11lk\$86h\$1@smc.vnet.net>

```In article <gn11lk\$86h\$1 at smc.vnet.net>,

> Ok, I stumbled across Upvalues today and I thought they were gorgeous
> for my case.
>
> My case is this: I need the intersection of two really large sets, it
> looks like this:
>
> Intersection[sym[l], sym[q]]
>
> Now, they are really two large to compute them. I can compute the
> intersection faster myself. So, I tossed along and defined something
> like this:
>
>
> Intersection[sym[a_], sym[b_]] ^:= 42
>
> Unfortunately, Mathematica has a strong preference for using the
> downvalue of sym for the computation, regardless of the order I use
> for input.
>
> If I undefine "sym", things work fine, but that is of course a whole
> lot less elegant. Is there a way to "push" the priority of the upvalue
> definition, so it gets used whenever possible?

could add the attribute *HoldAll* to the function *Intersection[]*. For
instance,

In[1]:= Intersection[sym[l], sym[q]]

Out[1]= sym[]

In[2]:= Intersection[sym[a_], sym[b_]] ^:= 42

In[3]:= Intersection[sym[l], sym[q]]

Out[3]= 42

In[4]:= sym[x_] := RandomInteger[{1, 10}, RandomInteger[{1, 5}]]

In[5]:= Intersection[sym[l], sym[q]]

Out[5]= {1, 2}

In[6]:= SetAttributes[Intersection, HoldAll]
Intersection[sym[l], sym[q]]

Out[7]= 42

Regards,
--Jean-Marc

```

• Prev by Date: Re: copy/paste of exponents
• Next by Date: Re: Scalar plot in 3D
• Previous by thread: Setting upvalues, using ^:=, such that they get actually used
• Next by thread: Scalar plot in 3D