2011-12-14 22 views
13

でドキュメントを削除します。違いと<a href="http://reference.wolfram.com/mathematica/ref/ClearAll.html" rel="noreferrer">ClearAll</a>状態のため、MathematicaではMathematicaの

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特にスレッドの最初から15番目のスレッドであるOleksandr Rasputinovの3番目のポストを見ると、 'Remove'が必要なときと特別なものになる理由について、いくつかの理由があります。 –

答えて

13

ClearAllは、シンボルテーブル内のシンボルを残し:

In[1]:= x=7; 

In[2]:= ?x 
Global`x 

x = 7 

In[3]:= ClearAll[x] 

In[4]:= ?x 
Global`x 

Removeはシンボルテーブルから削除:シンボルが別のシンボルを隠した場合に代わりにClearAllRemoveを使用する

In[5]:= Remove[x] 

In[6]:= ?x 

Information::notfound: Symbol x not found. 

一つの理由は、あなたの$ 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を使用するもう1つの理由は、ノートブック・インターフェースのみ[編集]を選択し、既知のシンボル>コンプリートセレクション(またはMac上で、コマンド+ K)を含むことです。

+1

興味深い。シンボルテーブルから何かを削除する必要がある現実的なケースはありますか? –

+0

私は私の答えを修正しました。 –

+4

'' Needs ["JLink'"] ''を呼び出す前に ' - ' JavaClassPath [] 'を評価するなど、インクルードされた関数を使う前にパッケージをロードするのを忘れてしまうのが普通です。必要な 'Needs'が後で呼び出されると、' JLink'JavaClassPath''でシャドーイングされ、 '' Global'JavaClassPath''となり、フロントエンドは両方のシンボルを赤色で表示します。 '' [Global''JavaClassPathを削除する] ''は状況を修正します。 – WReach

関連する問題