Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

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




  • Prev by Date: Re: Question about DeleteCases to remove list elements based on first character
  • Next by Date: Re: NDSolve output without interpolating function
  • Previous by thread: Re: opposite of AppendTo
  • Next by thread: Re: opposite of AppendTo