一般的な表記と慣例
関数名
関数の引数
通常,組込み関数の作用する式やオブジェクトは,第1引数として関数に与える.続く引数には補助的なパラメータを与える.
オプション
組込み関数によってはオプションを取るものがある.各オプションは名前を持ち,シンボル,場合によっては文字列として表現される.オプションの指定には規則の形式
または
が使用される.このような規則は,関数のすべての引数の後に置かれる.複数のオプションを指定するときはどの順番でもよい.特にオプションを与えなかったものについては,オプションのデフォルト値が採用される.
| Options[f] | f のすべてのオプションのデフォルト値を返す |
| Options[expr] | 式に与えられたオプションを返す |
| Options[expr,name] | 式のオプション name の値を返す |
| AbsoluteOptions[expr,name] | たとえAutomaticの設定になっていてもオプション name の絶対的な設定値を返す |
| SetOptions[f,name->value,...] | f のオプションのデフォルト値を設定する |
| CurrentValue[name] | フロントエンドオプション name のオプション設定を与える.オプションを設定するためには,割当ての左辺で使うことができる |
要素の番号付け
部分列の指定
| All | 全要素 |
| None | 零要素 |
| n | |
| -n | 末尾から n 個の要素 |
| {n} | n 番目の要素のみ |
| {m,n} | m 番目から n 番目までの要素(ともに含まれる) |
| {m,n,s} | ステップ s で m 番目から n 番目までの要素 |
の列指定は,m,
,
, ...から n 以下の最大要素までに対応する.
部分列の指定は,関数Drop,Ordering,StringDrop,StringTake,Take,Threadで使用されている.
レベルの指定
非負の正数 n に対し,式のレベルは n 個の添字により指定される要素の集合と定義される.負数-n のレベルは式の部分のうち深さ n を持つものすべて,を表す.式の深さDepth[expr]は,式のどんな部分でも指定可能とするために必要な添字の個数に1を足した値で与えられる.通常,レベルによる適用範囲指定では頭部は含まれないが,Heads->Trueのオプションが与えられれば頭部も含めるようにできる.レベル
は式全体を示す.レベル
では,シンボルやその他のオブジェクトのうち,それ以上部分式を持たないものが指定される.
形式でレベルの範囲を指定すると,木構造レベル
よりも上のレベル,レベル
よりも下のレベルに属さない部分式すべてが指定される.
の符号が一致している必要はない.例えば,
は最上位よりは下のレベルだが,木の葉よりは上のレベルに属する部分式を指定できる.
レベル指定はApply,Cases,Count,FreeQ,Level,Map,MapIndexed,Position,Replace,Scan等の関数で使われる.ただし,関数によって適用レベルのデフォルトが違うので注意が必要である.
反復変数
| {imax} | |
| {i,imax} | i が1から |
| {i,imin,imax} | i が |
| {i,imin,imax,di} | i が |
| {i,list} | i が list の連続した値を取る |
| {i,imin,imax},{j,jmin,jmax},... | i が |
反復変数はSum,Table,Do,Range等の関数で使われる.
反復パラメータ
,di は整数である必要はない.変数 i が開始値
から,di ずつ増分され,i の次の値が
を超えてしまうならば反復を停止する.
が数値を与えるのならば,反復パラメータにシンボルを含む任意の式を使用できる.
複数の反復変数を使うとき,後側に指定された反復変数の反復範囲は,それより前に指定された反復変数の値に依存していても構わない.
変数
として任意の記号式を指定できる.つまり単一のシンボルである必要はない.
が反復関数内だけの局所的なものとなるように自動的にその値が設定される.実際には,これは反復関数を,
を含むBlock構文により包み込むことで効率的に実現されている.
反復関数の評価の過程に関しては「評価」で述べている.
スコープの限定
| Function[{x,...},body] | 局所パラメータ |
| lhs->rhs および lhs:>rhs | 局所パターン名 |
| lhs=rhs および lhs:=rhs | 局所パターン名 |
| With[{x=x0,...},body] | 局所定数 |
| Module[{x,...},body] | 局所変数 |
| Block[{x,...},body] | 大域変数の局所値 |
| DynamicModule[{x,...},body] | Dynamicインターフェースの局所変数 |
Mathematica におけるスコープ構文.上のグループの関数は辞書的に変数をスコープする
スコープ構文により,あるシンボルの名前あるいは値が局所的になるようにできる.
スコープ構文の中には辞書的にスコープするものもある.これは,指定された変数またはパターンの文字通りの例が,適切な値で置換されるということである.局所変数名が必要なときは,形式 xxx の名前のシンボルは一般に
に変更される.ネストしたスコープ構文が評価されるとき,外側のスコープ構文のシンボルと名前が競合することがないように,新しいシンボルは自動的に内側の構文において生成される.
変換規則や定義が使われるとき,ルールの右辺に現れるパターン名の置換処理がReplaceAll(
)により実現される.このとき,右辺のスコープ構文に現れる他のオブジェクトを表現する必要が生じた場合,新しいシンボルが生成される.
Moduleは,評価されるたびに,本体式に現れる局所変数のすべてについて
の形式の固有な名前を持つシンボルを生成する.
Blockは大域変数の値を局所化する.大域変数に依存するブロックのボディにおける評価はすべて,変数がボディに明示的に現れなくても局所的に指定された値を使用するが,後続する評価からのみ参照される.Blockのボディは大域変数を変更することもできるが,そのような変更はBlockが実行を終了するまでしか持続されない.
DynamicModuleは変数をノートブックのそれぞれのDynamicModule出力に局所化する.つまり,コピー・ペーストを使って生成されたそれぞれのDynamicModule出力で,各々で局所化された変数が使われるということである.
式の並び順
属性OrderlessやSort等の関数で自動的に使用される.標準の並び順では以下の規約に従っている.
数学関数
Mathematica に組み込まれているLog[x]やBesselJ[n, x]等の数学関数は下記の共通な特徴を持っている.
- 関数は属性Listableを持つ.このため,引数にリストが与えられたとき,関数は各要素に自動的に適用される.
- 属性NumericFunctionを持つ.このため,引数が数値なら数値を返す.
- 引数に整数しか取らない関数を除き,Mathematica の数学関数はどんな精度でも評価可能である.また,引数はどんな複素数でもよい.関数が特定の値において未定義になるときは,結果はシンボルの形で返される.
- 関数を数値的に評価するとき,引数の持つ精度から得ることのできる精度以上は出せない.例えば,N[Gamma[27/10], 100]は高精度の答を返すが,N[Gamma[2.7], 100]の答は高い精度にはならない.
数学定数
Mathematica に組み込まれているEやPi等の数学定数は次の特徴を持っている.
- NumericQや他の関数において,定数は数値型のオブジェクトとして扱われる.
- 属性Constantを持つ.このため,微分を行う際に定数として扱われる.
プロテクト
Mathematica では組込みのオブジェクトの内容や動作を変更する指示を行うことができる.
組込み関数を不注意で書き換えることのないよう,通常の組込みオブジェクトは属性Protectedを持つ.組込みオブジェクトを上書きするには,まず,この属性を除去しておく必要がある.これは,関数Unprotectにより行うことができる.
Mathematica のいくつかの重要な組込みオブジェクトには,一切書き換えられないものもある.これらは属性Protectedとともに属性Lockedも持つ.属性Lockedは,属性の変更を禁止するもので,それゆえ属性Protectedの除去もできないのである.
短縮形の文字列パターン
StringMatchQ,Names,Remove等の関数では,StringExpressionにより指定される完全な文字列パターンの他に,短縮形の文字列パターンも与えることができる.短縮形の文字列パターンには,通常の文字列を意味することのできる一定のメタ記号を含めることができる.
