Re: Releasing several Holds simultaneously

*To*: mathgroup at smc.vnet.net*Subject*: [mg82311] Re: Releasing several Holds simultaneously*From*: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>*Date*: Wed, 17 Oct 2007 04:06:51 -0400 (EDT)*References*: <ff1po5$90n$1@smc.vnet.net>

Hi, I love such questions ! Try: RemoveInnerHold[expr_] := Module[{syms, rep, nexpr}, syms = Cases[expr, Except[Hold | HoldComplete | HoldPattern | HoldForm, _Symbol], Infinity, Heads -> True]; rep = Thread[syms -> Table[Unique[], {Length[syms]}]]; nexpr = (expr /. rep) //. Hold[any_] :> any; nexpr /. (Reverse /@ rep) ] while Hold[Hold[q] + Hold[c] + Hold[2 + 3 + 4]] // ReleaseHold gives Hold[2 + 3 + 4] + Hold[c] + Hold[q] but RemoveInnerHold[Hold[Hold[q] + Hold[c] + Hold[2 + 3 + 4]]] gives 9+c+q Regards Jens Andrew Moylan wrote: > Hold[a := Hold[1]] > > How can I release both of these Holds (and thus execute a:=1) > simultaneously? > > ReleaseHold[%] doesn't work; it evaluates a := Hold[1] before the other hold > is removed. > > % /. Hold[x_]:>x does the same thing, because /. only matches once per part. > >