コンテキスト
変数名と関数名は,できるだけ具体的な名前にした方がよい.しかし,あまり長いのも考えものである.
Mathematica では,「コンテキスト」と呼ばれる考え方が使われシンボルの名前を構成することができるようになっている.コンテキストは,Mathematica のパッケージを使うときに特に重要で,あるパッケージで導入されたシンボルの名前が他のシンボルの名前と競合しないようにするために使われる.ユーザ自身でパッケージを記述する場合や,市販パッケージの中身を変更するような場合には,コンテキストについて詳しい知識を持つ必要がある.
対象になるオブジェクトが何であれ,その正式名称は必ず2つの部分からなる.すなわち,完全名はコンテキスト名と簡略名(いわゆる名前)からなり,「
」の書式で記述される.Mathematica において,記号
は(ASCII文字コード番号は10進数の96)コンテキストマークと呼ばれる.
一例として,コンテキストが

で簡略名が

からなるシンボルの正式名を作ってみる.
| Out[1]= |  |
今作ったシンボルを使ってみる.他のシンボルと同様に使うことができる.
| Out[2]= |  |
このシンボルには,どんな値でも定義することができる.
| Out[3]= |  |

と

は全く別のものとして扱われる.
| Out[4]= |  |
定義したいシンボルの種類に依存してコンテキストを使い分けるとよい.例えば,物理単位を表したシンボルには,特別なコンテキスト
を使ったりすることができる.そうすると,単位記号の完全名は
(ジュール)とか
(モル)とかになる.
完全名を使わなくても,普通は,短くて便利な簡略名だけで間に合う.
現行セッションの任意位置において,現行のコンテキスト$Contextは必ず1つだけある.シンボルが$ContextPath上の同じ短縮名を持つシンボルで隠されていない限り,そのコンテキストにあるシンボルはその簡略名を使うだけで参照することができる.
Mathematica セッションにおけるデフォルトのコンテキストは

(大域)である.
| Out[5]= |  |
$ContextPath上に名前が

であるシンボルが存在しないので,現行のコンテキストのシンボルは簡略名だけで参照することができる.
| Out[6]= |  |
コンテキストは,いくつかの面で,多くのオペレーティングシステムで使われているファイルのディレクトリに似ている.例えば,ファイルを指定するには,ファイル名とディレクトリ名を一緒に指定すれば確実にできる.しかし,現行ディレクトリにあるファイルなら,いちいちディレクトリ名を指定する必要はない.
多くのオペレーティングシステムにおけるディレクトリがそうであるように,Mathematica のコンテキストも階層構造を取っている.例えば,シンボルが3つのコンテキストからなる階層位置に置かれている場合,その正式名は,
となる.
| context `name またはc1`c2 ... `name | 絶対指定コンテキスト |
| `name | 現行コンテキスト |
| `context`name または`c1`c2` ... `name | 相対指定コンテキスト |
| name | 相対指定コンテキスト |
コンテキストの指定法
コンテキスト

においてシンボルを作る.
| Out[7]= |  |
Mathematica のセッションが始まる時点では,コンテキストは
(大域的)にされる.普通は,このコンテキストにオブジェクトを作成していくことになる.例外として,Pi等の組込み定数は
(システム)コンテキストに定義される.
だけでなく,
のようなよく使われるコンテキストは特別な操作なしで使うことができると便利である.そこで,コンテキストの検索パスと呼ばれるオブジェクトが提供されているので,それを使うことで自動的なアクセスを可能にすることができる.また,現行コンテキストはパラメータ$Contextに登録される.検索パスは$ContextPathに保持される.コンテキスト名が検索パスにあれば,そのコンテキストにあるオブジェクトを参照するときに特にそのコンテキストを指定する必要はない.簡略名だけで指定できる.
Mathematica のシンボルに対するコンテキスト検索パスは,プログラムファイルを探すためのオペレーティングシステム上の検索パスに相当する.$Contextは$ContextPathの後に検索されるため,ファイルの検索パスに「.」が加わったものと考えることができる.
コンテキスト検索パスにはシステムコンテキストも含まれている.
| Out[8]= |  |
Piのコンテキストはシステム(

)である.
| Out[9]= |  |
コンテキスト関連の機能
違うコンテキストならば,簡略名は同じであっても構わない.例えば,物理単位コンテキスト
と生物コンテキスト
と呼ばれるコンテキストを作ったとする.すると,そのどちらのコンテキストにも,
の同一名でシンボルを作成することができる.
それでは,簡略名
だけを指定すると,どちらの変数が実際に選択されるだろうか.検索パスのリストでより先に指定してあるコンテキストが優先される.
簡略名を

とするコンテキストが違う変数を2つ作成する.
| Out[10]= |  |
| Out[11]= |  |
ここで

と入力すると,コンテキスト

のシンボル,つまりモル数を表すためのシンボルが選択される.
| Out[12]= |  |
簡略名だけで参照すると,通常,検索パスで先に現れるコンテキストにある同名のシンボルが選択される.このため,検索パスの後の方で現れるコンテキストに同名のシンボルがある場合や,現行のコンテキストに同盟のシンボルがある場合,これらのシンボルは隠されてしまう.隠されたシンボルを参照するには,コンテキストを含む完全名を指定する必要がある.
$ContextPathで既存のシンボルを隠してしまうような新しいシンボルを導入した場合,メッセージが出力される.また,ノートブックフロントエンドが赤く色付けすることで隠されたシンボルを警告する.
大域コンテキスト

に簡略名

でシンボルを作る.入力すると,同じ簡略名

で別のシンボルがある旨が警告される.
| Out[13]= |  |
単に

と参照すると,コンテキストパスに最初に出てくるシンボル

が選択されてしまう.
| Out[14]= |  |
既存のシンボルを隠してしまうようなシンボルを一度導入してしまうと,$ContextPathを変更して検索パス指定のコンテキストの並び順を変えるか,シンボル自体を除去するまでは遮蔽効果が続いてしまう.除去するには単にシンボルの持つ値を消すだけでは不十分で,シンボル自体を消し去る必要がある.除去はRemove[s]を使い行う.
シンボルの消去と除去
シンボル

を除去する.
また,

を参照すると,今度はシンボル

が選択される.
| Out[16]= |  |
シンボル名が出力されるとき,Mathematica はその正式名と簡略名のどちらかを出力に使う.実際に出力される名前は,現行コンテキスト$Contextと検索パス$ContextPathの現行設定に対応して,該当シンボルを取得するために必要な名前である.
最初のシンボルは簡略名で表示される.指定するときも簡略名だけだと最初のシンボルが選択される.
| Out[17]= |  |
簡略名を入力し,その名前に相当するシンボルがどのコンテキストにも存在しない場合は,それは新規のシンボルとして生成される.そのとき,新規シンボルは$Contextにある現行コンテキストにおいて作られる.
簡略名

を入力すると,シンボルが新規に作られる.
| Out[18]= |  |
現行コンテキストは

だから,シンボル

はそこにできる.
| Out[19]= |  |