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