Подтвердить что ты не робот

Разница между Clear и Remove в Mathematica

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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 заключается в том, что интерфейс ноутбука включает только известные символы, когда вы выбираете Edit > Complete Selection (или на Mac, нажмите Command-K).