One more question. (I apologise for the number of questions).
The following rule is not allowed
x + y = z
Set::write : Tag Plus in x + y is Protected.
z
since Plus has the attribute Protected.
If you want to avoid the drastic way of Unprotect Plus and add the rule
you can use
x /: x + y = z
z
Suppose now the following
Clear[f]
f[x_, 2] := foo
f[2, x_] := foofoo
Then
DownValues[f]
{HoldPattern[f[x_, 2]] :> foo, HoldPattern[f[2, x_]] :> foofoo}
If you want, you can change the order that assigned down values are
stored by
DownValues[f] = Reverse[DownValues[f]]
{HoldPattern[f[2, x_]] :> foofoo, HoldPattern[f[x_, 2]] :> foo}
However
Attributes[DownValues]
{HoldAll, Protected}
Using Set we attach a value to the head of the left-hand side.
So, how we can (re)assign a new value to DownValues if its Head
has the attribute Protected?
Thanks in advance for any help.