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