Re: opposite of AppendTo
- To: mathgroup at smc.vnet.net
- Subject: [mg124320] Re: opposite of AppendTo
- From: "Nasser M. Abbasi" <nma at 12000.org>
- Date: Tue, 17 Jan 2012 03:19:58 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jf13lb$5ma$1@smc.vnet.net>
- Reply-to: nma at 12000.org
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!! > I do not know if there is such a command now, looked and can't see one (this does not mean there is not one). 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