Re: Deleting Selective DownValues
- To: mathgroup at smc.vnet.net
- Subject: [mg64012] Re: Deleting Selective DownValues
- From: Peter Pein <petsie at dordos.net>
- Date: Fri, 27 Jan 2006 05:13:26 -0500 (EST)
- References: <dra3e7$m4s$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi David,
isn't this one a bit easier?
deleteDownValues[label_Symbol,numberOfArgs_Integer?Positive]:=
Set[DownValues[label],
Select[DownValues[label],Count[First[#],_Blank,3]!=numberOfArgs &]];
Clear[f]
f[x_,y_,z_]:=x y z
f[a_,b_]:=a b
f[x_]:=x
DownValues[f]
deleteDownValues[f,2]
-->
{HoldPattern[f[x_,y_,z_]]:>x y z, HoldPattern[f[a_,b_]]:>a b,HoldPattern[f[x_]]:>x}
{HoldPattern[f[x_,y_,z_]]:>x y z, HoldPattern[f[x_]]:>x}
Cordially,
Peter
David Park schrieb:
> I think I found the solution for deleting definitions with a given number of arguments. The trick was to change the function name to stop evaluation.
>
> deleteDownValue[label_Symbol, numberOfArgs_Integer?Positive] :=
> Module[{g},
> DownValues[f] =
> Select[DownValues[f],
> Length[First[#] /. label -> g /. HoldPattern -> Identity] !=
> numberOfArgs &];]
>
> Clear[f]
> f[x_, y_, z_] := x y z
> f[a_, b_] := a b
> f[x_] := x
> DownValues[f]
> deleteDownValue[f, 2]
> DownValues[f]
>
> {HoldPattern[f[x_, y_, z_]] :> x y z, HoldPattern[f[a_, b_]] :> a b,
> HoldPattern[f[x_]] :> x}
>
> {HoldPattern[f[x_, y_, z_]] :> x y z, HoldPattern[f[x_]] :> x}
>
> David Park
> djmp at earthlink.net
> http://home.earthlink.net/~djmp/
>