Re: opposite of AppendTo

*To*: mathgroup at smc.vnet.net*Subject*: [mg124340] Re: opposite of AppendTo*From*: "Nasser M. Abbasi" <nma at 12000.org>*Date*: Tue, 17 Jan 2012 03:26:56 -0500 (EST)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <jf13lb$5ma$1@smc.vnet.net> <4F149D4C.2040606@12000.org>*Reply-to*: nma at 12000.org

On 1/16/2012 3:57 PM, Nasser M. Abbasi wrote: > On 1/16/2012 6:02 AM, burke wrote: >> AppendTo[s,e] appends "e" to "s" and then RESETS "s". How does one >> delete or remove an element "e" from a list "s" and then RESET "s"? >> The _reset_ is my problem. I want to be able to add and delete >> elements of a list (a list of graphical elements with very low >> opacity). I can "appendto" the list at will but am unable to delete >> elements (using Delete, DeleteCases, Except, Select, etc.). Deleting >> "e" from "s" is easy enough, but resetting "s" seems impossible. >> Help!! >> > btw, if you do not like to use Unevaluate@ every time to pass something by reference, then you can use the following version instead: ------------------------- ClearAll[myDelete] myDelete[from_, item_] := Module[{loc}, loc = Position[from, item]; If[Not[loc === {}], from = Delete[from, loc]] ]; SetAttributes[myDelete, HoldFirst]; ------------------------------ and now can just call it as --------------------------- s = {1, 2}; e = 2; myDelete[s, e]; s --------------------------- ===> {1} This might be easier to use, since you do not need to add Unevaluated@ each time. --Nasser > > But it is possible to write your own myDelete function which does > the resetting and it would look the same as the AppendTo. You just > need to pass the list to the function myDelete by reference to do this, > but it will now work by resetting the list. > > Like this > > ----------------- > ClearAll[myDelete] > myDelete[from_, item_] := Module[{loc}, > loc = Position[from, item]; > If[Not[loc === {}], from = Delete[from, loc]] > ]; > ------------ > > Now you can use it like this: > > s = {1, 2}; > e = 2; > myDelete[Unevaluated@s, e]; > s > ===> {1} > > > s = {1, 2, 3, 2}; > e = 2; > myDelete[Unevaluated@s, e]; > s > ===> {1, 3} > > > s = {1, 2, {3}, 2}; > e = {3}; > myDelete[Unevaluated@s, e]; > s > ===>{1, 2, 2} > > and so on. > > So, you just need to do > 1. replace Delete with myDelete > 2. add Unevaluated@ to the list > > use at your own risk. Not tested very well. Not responsible for > any damage caused by the use of this myDelete function. > > --Nasser