Re: Quit versus Clear["Global`*"]
- To: mathgroup at smc.vnet.net
- Subject: [mg121241] Re: Quit versus Clear["Global`*"]
- From: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>
- Date: Tue, 6 Sep 2011 03:55:12 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201109031205.IAA05310@smc.vnet.net> <j3u7r6$a88$1@smc.vnet.net>
This is not a side-effect; it is necessary in order for the symbol to be
removed. Retaining any references whatsoever will prevent the symbol from
being deleted from the symbol table due to Mathematica's
reference-counting garbage collection. When calling Remove, one explicitly
requests that the symbol be completely removed, and this is duly performed
along with all that it implies. If one only wishes to clear the
definitions on a symbol rather than destroying the symbol itself, the use
of Remove would be erroneous, since this quite separate operation is the
domain of ClearAll.
A situation in which Remove might be needed is where a function has
created temporary symbols and wishes to destroy them before returning in
order to avoid clogging up the symbol table (which would represent a
memory leak and may slightly worsen Mathematica's performance). Although
the Temporary attribute could be used instead, catching all the references
may not be easy, so Remove is helpful in that it automatically invalidates
any references that would otherwise have prevented garbage collection. In
other words, Remove is a specialised function with a specialised use, not
simply an alternative to Clear/Unset et al.
On Mon, 05 Sep 2011 12:07:23 +0100, DrMajorBob <btreat1 at austin.rr.com>
wrote:
> Your experiment makes Remove look useful (possibly), but here's one that
> does not:
>
> ClearAll[f]
> f[x_] := Plot[x, {x, 0, 1}] SetAttributes[f, Listable]
> Remove[x]
> ?? f
>
> Remove[x] cripples f without mentioning it, which I'd call a very ugly
> side-effect.
>
> Bobby
>
> On Sun, 04 Sep 2011 17:05:26 -0500, Murray Eisenberg
> <murray at math.umass.edu> wrote:
>
>> Try the following little three-part experiment. In each part, the last
>> step tells you what Mathematica now knows about the symbol f.
>>
>> f[x_] := Plot[x, {x, 0, 1}]
>> SetAttributes[f, Listable]
>> Clear[f]
>> ??f
>>
>> f[x_] := Plot[x, {x, 0, 1}]
>> SetAttributes[f, Listable]
>> ClearAll[f]
>> ??f
>>
>> f[x_] := Plot[x, {x, 0, 1}]
>> SetAttributes[f, Listable]
>> Remove[f]
>> ??f
>>
>> On 9/4/11 4:12 AM, AES wrote:
>>> In article<j3u7r6$a88$1 at smc.vnet.net>,
>>> Murray Eisenberg<murray at math.umass.edu> wrote:
>>>
>>>> First, Clear, whether for a single object or an entire list of
>>>> objects,
>>>> does not remove their Attributes, e.g., just their values. You might
>>>> want ClearAll instead.
>>>
>>> And how do either of those differ from Remove?
>>>
>>
- References:
- Quit versus Clear["Global`*"]
- From: Themis Matsoukas <tmatsoukas@me.com>
- Quit versus Clear["Global`*"]