2011-12-14 54 views
13

在数学为ClearAll状态取出,文档:差异与在数学

ClearAll[symb1, symb2, ...]
清除值,定义,属性,消息和与缺省的符号。

它也支持类似的格式在那里可以清除所有值匹配其输入字符串模式/定义:

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

但也有功能Remove,对于该文件说:

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

它还支持ClearAll支持的相同模式的字符串输入。

对我来说,似乎两个功能都完成了同样的事情。使用一个或另一个有什么实际的区别?

我知道,如果我给一个符号的属性,Clear将不会删除它,但ClearAllRemove将。但似乎RemoveClearAll也在做同样的事情。

+0

这个最近的Mathgroup线程似乎相关:https://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/3db59462237f509f。请特别注意该线程中的Oleksandr Rasputinov的第三个职位(它是线程开始的第15个) - 他给出了一些很好的理由,以便何时需要删除,以及是什么使其变得特别。 – 2011-12-15 12:59:46

回答

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的是,笔记本的接口仅包括当你选择Edit已知符号>完整选择(或Mac上,按下Command-K)。

+1

有趣。是否有任何实际情况下可能实际上必须从符号表中删除某些内容? – 2011-12-14 21:54:57