Re: Deleting a DownValue, Evaluate[f@@argList]=. does not do it
- To: mathgroup at smc.vnet.net
- Subject: [mg20796] Re: Deleting a DownValue, Evaluate[f@@argList]=. does not do it
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sun, 14 Nov 1999 18:13:48 -0500 (EST)
- References: <80au96$j2i@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Adalbert, Some experiments: (1) ------------ One-at-a-time setting and unsetting --------------- Clear[f]; f[1] = 1; f[2, 3] = 2; ?f Global`f f[1] = 1 f[2, 3] = 2 Block[{f, Unset}, f @@ {2, 3} =.] ?f Global`f f[1] = 1 ( we had to block f to stop it evaluating f[2,] to 1 immediately - this is what gave the problem that you found; and we had to block Unnset so that it did not hold its entry as f@@{1}) We can also use a pure function: (f[##] =.) & @@ {1}; ?f Global`f (2) ----------- Lists of inputs and values ------------------- - two ways (a) using Block, (b) using a pure function (a) Using Block Clear[f] Block[{Set, f}, f @@@ {{1}, {2, 3}, {4}, {5}} = {1, 2, 3, 4}]; ?f Global`f f[1] = 1 f[4] = 3 f[5] = 4 f[2, 3] = 2 Block[{Unset, f}, f @@@ {{2, 3}, {5}} =.]; ?f Global`f f[1] = 1 f[4] = 3 *Note*: Unset[{e1,e2 ..}] unsets each of e1, e2 ... . (b) Using a pure function Clear[f] MapThread[(f[Sequence @@ #1] = #2) &, {{{1}, {2, 3}, {4}, {5}}, {1, 2, 3, 4}}]; ?f Global`f f[1] = 1 f[4] = 3 f[5] = 4 f[2, 3] = 2 (f[##] =.) & @@@ {{2, 3}, {5}}; ?f Global`f f[1] = 1 f[4] = 3 Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 <hanssen at zeiss.de> wrote in message news:80au96$j2i at smc.vnet.net... > Hi, MathGroup, > > f[1]=1; > f[2]=2; > ?f > > yields > > "Global`f" > f[1] = 1 > f[2] = 2 > > now get rid of definition for 1 > > f[1]=.; > ?f > > yields > > "Global`f" > f[2] = 2 > > > So far, it works as expected. I want to memorize results for combinations of arguments > like f[a,b,c]=results and so on. To do this, I write f@@argList. Now I demonstrate > this on lists with length 1, to make it simple. When making the assignment, it has to be > wrapped in Evaluate: > > Clear[f]; > Evaluate[f@@{1}]=1; > Evaluate[f@@{2}]=2; > ?f > > yields > > "Global`f" > f[1] = 1 > f[2] = 2 > > as before. Now I want to get rid of the definition for 1 in the analogous way: > > Evaluate[f@@{1}]=. > > yields > > Unset::usraw: Cannot unset raw object ! > $Failed > > How to proceed without searching through DownValues[f] and deleting > the one meant - very awkward? > > kind regards > > Dipl.-Math. Adalbert Hanszen >