Mathematica中Clear和Remove之间的区别

时间:2011-12-14 21:46:10

标签: wolfram-mathematica

在Mathematica中,ClearAll州的文档:

  

ClearAll[symb1, symb2, ...]
  使用符号清除值,定义,属性,消息和默认值。

它还支持类似的格式,可以清除与输入字符串模式匹配的任何值/定义:

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

但是还有函数Remove,文档说明了这些:

  

Remove[symbol1, ...]
  完全删除符号,以便Mathematica不再识别它们的名称。

它还支持ClearAll支持的基于模式的字符串输入。

对我来说,似乎两个功能完全相同。使用其中一个是否有任何实际差异?

我知道如果我为符号提供属性,Clear将不会删除它,但ClearAllRemove会删除。但似乎RemoveClearAll正在做同样的事情。

1 个答案:

答案 0 :(得分:13)

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)。