Разница между очисткой и удалением в Mathematica - PullRequest
13 голосов
/ 15 декабря 2011

В Mathematica документация для ClearAll гласит:

ClearAll[symb1, symb2, ...]
очищает значения, определения, атрибуты, сообщения и значения по умолчанию с помощью символов.

Он также поддерживает аналогичный формат, в котором он может очистить любые значения / определения, которые соответствуют шаблону входной строки:

ClearAll["form1", "form2", ...]

Но есть также функция Удалить , для которой в документации написано:

Remove[symbol1, ...]
удаляет символы полностью, поэтому Mathematica больше не распознает их имена.

Он также поддерживает тот же строковый ввод на основе шаблона, который поддерживает ClearAll.

Мне кажется, что обе функции выполняют одну и ту же вещь. Есть ли практическая разница в использовании одного или другого?

Я знаю, что если я дам атрибуту символ, Clear не удалит его, а ClearAll и Remove. Но похоже, что Remove и ClearAll делают одно и то же.

1 Ответ

13 голосов
/ 15 декабря 2011

ClearAll оставляет символ в таблице символов:

In[1]:= x=7;

In[2]:= ?x
Global`x

x = 7

In[3]:= ClearAll[x]

In[4]:= ?x
Global`x

Remove удаляет его из таблицы символов:

In[5]:= Remove[x]

In[6]:= ?x

Information::notfound: Symbol x not found.

Одной из причин использования Remove вместо ClearAll является то, что символ скрывает другой символ дальше по вашему $ ContextPath. Вот надуманный пример:

In[1]:= $ContextPath = { "Global`", "System`" };

In[2]:= Global`Sin[x_] := "hello" 

Sin::shdw: Symbol Sin appears in multiple contexts {Global`, System`}
    ; definitions in context Global`
     may shadow or be shadowed by other definitions.

In[3]:= Sin[1.0]

Out[3]= hello

In[4]:= ClearAll[Sin]

In[5]:= Sin[1.0]

Out[5]= Sin[1.]

In[6]:= Remove[Sin]

In[7]:= Sin[1.0]

Out[7]= 0.841471

Другая причина использования Remove заключается в том, что интерфейс ноутбука включает в себя только известные символы, когда вы выбираете «Правка»> «Полный выбор» (или на Mac нажмите Command-K).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...