16
$\begingroup$

Consider the case where a symbol has multiple definitions attached to it,

a /: Subscript[a,2] := 1
a[b_] := 2
a[b_, c_] := 3

How does one clear (/unset/remove) only one of those definitions while leaving the others intact?

$\endgroup$
  • 4
    $\begingroup$ =. works nicely for removing any of the last two definitions. You need TagUnset[] to remove the first one. $\endgroup$ – J. M. will be back soon Jan 18 '12 at 0:32
17
$\begingroup$

You can use Unset for this, like so:

a[b_, c_] =.

=. works with UpValues too (the full form of this has TagUnset):

a /: Subscript[a,2] =.

You need to use the same pattern in Unset that you used in the definition. Get this using Information (i.e. ?a).

$\endgroup$
16
$\begingroup$

You can use Unset or =. to remove a single definition. For example, for your above function its DownValues are

DownValues@a
Out[1]= {HoldPattern[a[b_]] :> 2, HoldPattern[a[b_, c_]] :> 3}

Unsetting the definition for a[b_, c_],

a[b_, c_] =.
DownValues@a
Out[2]= {HoldPattern[a[b_]] :> 2}

It works similarly for UpValues too, i.e., you can do a /: Subscript[a,2]=. to clear that particular UpValue

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.