next up previous
Next: 例1. Up: 8 Mathematica のプログラミング機能 Previous: 8.2 関数定義

8.3 関数定義のための細かい注意

以下の記述はプログラミングの中級者向けであって、最初は読み飛ばして構 わない。実用的なプログラムを書く際に必要な、他への悪影響が出ない&他か らの影響を受けないようにするための工夫の話。

局所変数の利用
特別なことをしないかぎり、変数は大域的なものとなる ので(要するに、どこからでも見える)、名前の衝突3に気を付ける必要がある。例えば
        PowerSum[x_, n_] := Sum[x^i, {i,1,n}]
とすると、 ``PowerSum[x,5]'' のようなのは大丈夫だが、 ``PowerSum[i,5]'' はダメになる。``Module[{local-var1,local-var2,..}, procedure]'' を利用して
  PowerSum[x_,n_] :=
    Module[{i},             ← 局所変数 i を使うことを宣言
      Sum[x^i, {i,1,n}]
    ]
とする方が良い (Module[] に似たものに Block[] という関数がある。 前者は変数そのものを局所的に作るが、 後者は変数の値だけを局所的に作る。)。
context の利用
実は、上の例はまだ完璧とは言えない。``i'' という名前そのものはグ ローバルに見えてしまう(あまり実害はないけれど)。context (文脈と訳され ることが多い)を導入して、名前の扱いを制御する。
  Begin["Private`"]
    PowerSum[x_,n_] :=
      Module[{i},
        Sum[x^i, {i,1,n}]
      ]
  End[]
この例では ``Private`'' という context を導入している。 とはいえ、他人に使ってもらうプログラムを書く場合でもなければ、ここまで 気にする必要はないかもしれない。




next up previous
Next: 例1. Up: 8 Mathematica のプログラミング機能 Previous: 8.2 関数定義
Masashi Katsurada
平成16年7月21日