関数とプログラム
最初の例として,引数を2乗する関数fを考える.この関数を定義するのに必要なWolfram言語のコマンドは,f[x_]:=x^2である.式の左辺にある下線部(_)は「ブランク」と呼ばれ,非常に重要なものである.ブランクの持つ意味についてはここで説明するが,ここでは,_は定義式の右辺ではなく,左辺に置かれる,ということを覚えていてほしい.
f[x_]:=x^2 | 関数fを定義する |
?f | fの定義式を確認する |
Clear[f] | fに関するすべての定義情報を消去する |
Wolfram言語では,fのような関数に使う名前は単なる記号である.このため,組込み関数と区別するため,大文字で始まる関数名は使わないようにする.また,これらの名前を同じセッションで他のものに対して使わないようにする.
定義した関数が必要なくなったら,必ず定義を消去しておく.そうしないと,後で同じWolfram言語セッションにおいて同じ関数を別の用途に使おうとすると問題が起る.ユーザ定義された関数 f からすべての定義を消去するにはClear[f]を使う.
多くの計算問題で,同じ式を繰返しWolfram言語にタイプしなければならない状況が起るときがある.そのようなときは,入力のコマンドを含む関数を定義しておくことで何度も同じ式をタイプしなくても済むようになる.
ユーザ定義の関数は,本質的にはコマンドを実行するための「手続き(プロシージャ)」である.手続きには複数の計算ステップを記述することができる.区切りのため,ステップとステップの間にはセミコロンを入れる.
expr1;expr2;… | 評価する一連の式 |
Module[{a,b,…},proc] | 局所変数 a, b, … をともなう手続き |
Wolfram言語で手続きを記述するとき,手続き内で使う変数は局所的なものとして宣言しておくとよい.そうしておけば,変数が手続きの外で起ることと干渉することがなくなる.変数の局所化は,手続きをモジュールとして宣言することで行うことができる.
Wolfram言語には,Plotのように各種オプションを設定できる関数がいくつか組み込まれている.これらのオプションを扱うための共通の手順がいくつかあるので説明しておこう.
Plotの場合がそうであるように,関数にオプションがあっても,それに対して特に何も指定しなければ,デフォルト値が使われる.オプションのデフォルト値が何か確認するには,Options[function,option]を使う.また,デフォルト値を変更するには,SetOptions[function,option->value]を使うことで,デフォルト値を変更することができる.注意点として,一度,デフォルト値が変更されたなら,その設定は,再び変更されるまで常に有効になる.
Options[function] | すべてのオプションについて現行のデフォルト値を列挙する |
Options[function,option] | 特定のオプションについて現行のデフォルト値を参照する |
SetOptions[function,option->value,…] | デフォルト値を変更する |
Options[plot] | ある特定のプロットに使われているすべてのオプションを列挙する |
Options[plot,option] | 特定のオプションのみを参照する |
AbsoluteOptions[plot,option] |
上記の例のように,グラフィックスを表すために変数を使うと便利なことがよくあるが,グラフィックス事態は直接評価することができる.ノートブックインターフェースでこれを行う一般的な方法は,グラフィックスをコピーペーストするか,グラフィカル出力セルに入力し始めることである.後者の場合,その段階で出力セルは新規の入力セルに変換される.
明示的なImageSizeなしで生成されたプロットが入力セルに置かれると,それはより簡単に入力に収まるよう,自動的に縮小される.
Plotをデフォルトのオプション設定に戻す:
Wolfram言語を使っていて,ある処理を繰返し実行しなければならないときがある.これを行う方法はいろいろあるが,最も自然なのは,処理したい要素を並べたリスト等の構造体を作っておき,その各要素に対して必要な操作を一括で行う方法であろう.
もうひとつは,関数Doを使ったループを形成する方法である.この式はC言語やFortranの反復構造体と同じように機能する.Doでは,「和と積」に記述されているようにSumとProductと同じWolfram言語反復子の記述法が使われる.
Do[expr,{i,imax}] | i が1から imax の区間で式 expr を繰り返し計算する(刻み幅は+1) |
Do[expr,{i,imin,imax,di}] | i が imin から imax の区間で式 expr を繰り返し計算する(刻み幅は di) |
Print[expr] | 式 expr を出力(表示)し改行する |
Table[expr,{i,imax}] | i が1から imax の区間で式 expr を繰り返し計算し,値をリスト形式で出力する |
書式 x->value の変換規則を使った記号への値の置換えを「シンボルの値」で説明した.Wolframシステムの変換規則は,記号だけに対応したものではなくもっと一般的なものである.実際,どのようなWolframシステムの式でも,それに対応した変換規則を設けることが可能である.
変換規則の最も強力な面は,文字通りの変数や関数だけでなく,パターンに基づいたものであってもよいことである.ここで,パターンとは,例えば,ブランク(_)を含むf[t_]のような式を指す.ブランクはどんな式でも代替することができる.つまり,f[t_]に対する変換規則は,どんな引数を取っても有効である関数fの変換の仕方を指定する.これに対して,f[x]に対応したブランクなしの変換規則は,記述通りの式f[x]しか変換することができない.f[y]の変換に関しては何の効果も持たない.
任意の式へのパターンおよび変換規則の設定は,「パターン」と「変換規則と定義」で詳しく説明する.ここでは,Wolframシステムにおいてすべての式は特定のシンボル的な構造を持っており,また,そのため,変換規則を使うことで式の構造のどの部分でも変換することができる,というだけにとどめる.