一般的な表記と慣例
関数名
組込み関数の名前は以下のガイドラインに従って付けられる.
- 名前は完成した英単語,もしくは標準的な数学の略語により構成する.アメリカ英語のスペルに従う.
- 人名に基づいた名前を持つ数学関数は,通常PersonSymbol 形式にする.
関数の引数
通常,組込み関数の作用する式やオブジェクトは,第1引数として関数に与える.続く引数には補助的なパラメータを与える.
数学関数では,慣用的な数学表記で下付き文字として書かれる引数を,上付き文字として書かれる引数の前に指定する.
オプション
組込み関数によってはオプションを取るものがある.各オプションは名前を持ち,シンボル,場合によっては文字列として表現される.オプションの指定には規則の形式
name->value または
name:>value が使用される.このような規則は,関数のすべての引数の後に置かれる.複数のオプションを指定するときはどの順番でもよい.特にオプションを与えなかったものについては,オプションのデフォルト値が採用される.
オプションに関連した操作
要素の番号付け
| n | n 番目の要素(1から始める) |
| -n | 末尾から数えてn 番目の要素 |
| 0 | 頭部を指す |
要素の番号付け
部分列の指定
| All | 全要素 |
| None | 零要素 |
| n | 1からn 番目までの要素 |
| -n | 末尾からn 個の要素 |
| {n} | n 番目の要素のみ |
| {m,n} | m 番目からn 番目までの要素(m ,n ともに含まれる) |
| {m,n,s} | ステップs でm 目からn 番目までの要素 |
部分列の指定
{m, n, s}の列指定は,
m,
m+s,
m+2s,
...から
n 以下の最大要素までに対応する.
レベルの指定
レベルの指定
非負の正数
n に対し,式のレベルは
n 個の添字により指定される要素の集合と定義される.負数
-n のレベルは式の部分のうち深さ
n を持つものすべて,を表す.式の深さ
Depth[expr]は,式のどんな部分でも指定可能とするために必要な添字の個数に1を足した値で与えられる.通常,レベルによる適用範囲指定では頭部は含まれないが,
Heads->Trueのオプションが与えられれば頭部も含めるようにできる.レベル
0は式全体を示す.レベル
-1では,シンボルやその他のオブジェクトのうち,それ以上部分式を持たないものが指定される.
{n1, n2}形式でレベルの範囲を指定すると,木構造レベル
n1よりも上のレベル,レベル
n2よりも下のレベルに属さない部分式すべてが指定される.
ni の符号が一致している必要はない.例えば,
{2, -2}は最上位よりは下のレベルだが,木の葉よりは上のレベルに属する部分式を指定できる.
レベル指定は
Apply,
Cases,
Count,
FreeQ,
Level,
Map,
MapIndexed,
Position,
Replace,
Scan等の関数で使われる.ただし,関数によって適用レベルのデフォルトが違うので注意が必要である.
反復変数
| {imax} | imax 回反復する |
| {i,imax} | i が1からimaxまで刻み幅1で移動 |
| {i,imin,imax} | i がiminからimaxまで刻み幅1で移動 |
| {i,imin,imax,di} | i がiminからimaxまで刻み幅diで移動 |
| {i,list} | i がlistの連続した値を取る |
| {i,imin,imax},{j,jmin,jmax},... | i がiminからimaxまで変化し,i の各値に対してj がjminからjmaxまでという風に変化する |
反復の指定
反復変数は
Sum,
Table,
Do,
Range等の関数で使われる.
反復パラメータ
imin, imax ,
di は整数である必要はない.変数
i が開始値
imin から,
di ずつ増分され,
i の次の値が
imax を超えてしまうならば反復を停止する.
(imax-imin)/di が数値を与えるのならば,反復パラメータにシンボルを含む任意の式を使用できる.
複数の反復変数を使うとき,後側に指定された反復変数の反復範囲は,それより前に指定された反復変数の値に依存していても構わない.
変数
i として任意の記号式を指定できる.つまり単一のシンボルである必要はない.
i が反復関数内だけの局所的なものとなるように自動的にその値が設定される.実際には,これは反復関数を,
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 の名前のシンボルは一般に
xxx$に変更される.ネストしたスコープ構文が評価されるとき,外側のスコープ構文のシンボルと名前が競合することがないように,新しいシンボルは自動的に内側の構文において生成される.
変換規則や定義が使われるとき,ルールの右辺に現れるパターン名の置換処理が
ReplaceAll(
/.)により実現される.このとき,右辺のスコープ構文に現れる他のオブジェクトを表現する必要が生じた場合,新しいシンボルが生成される.
Moduleは,評価されるたびに,本体式に現れる局所変数のすべてについて
xxx$nnn の形式の固有な名前を持つシンボルを生成する.
Blockは大域変数の値を局所化する.大域変数に依存するブロックのボディにおける評価はすべて,変数がボディに明示的に現れなくても局所的に指定された値を使用するが,後続する評価からのみ参照される.
Blockのボディは大域変数を変更することもできるが,そのような変更は
Blockが実行を終了するまでしか持続されない.
DynamicModuleは変数をノートブックのそれぞれの
DynamicModule出力に局所化する.つまり,コピー・ペーストを使って生成されたそれぞれの
DynamicModule出力で,各々で局所化された変数が使われるということである.
式の並び順
属性
Orderlessや
Sort等の関数で自動的に使用される.標準の並び順では以下の規約に従っている.
- 整数,有理数,そして近似実数は,その値の順に並べられる.
- 複素数はその実部の値の順に並べられ,また同じ実部のものは虚部の絶対値の順にされる.
- シンボルは,名前順に並べられる.同じ名前のときは,コンテキスト順になる.
- 式は,通常,深さ順に並べられる.より短い式が最初に置かれる.
- ベキ乗と乗積は特別扱いされ,多項式の項に対応するように並べられる.
- 文字列は,辞書順に並べられるが,大文字は小文字の後に置かれる.
後に,スクリプト体,ゴシック体,2重書体,ギリシャ文字,そして,ヘブライ文字が続く.また,数学演算子は優先度の高い順に並べられる.
数学関数
Mathematica に組み込まれている
Log[x]や
BesselJ[n, x]等の数学関数は下記の共通な特徴を持っている.
- 関数は属性Listableを持つ.このため,引数にリストが与えられたとき,関数は各要素に自動的に適用される.
- 整数,有理数,代数式に対しては厳密値を返す場合がある.
- 引数に整数しか取らない関数を除き,Mathematica の数学関数はどんな精度でも評価可能である.また,引数はどんな複素数でもよい.関数が特定の値において未定義になるときは,結果はシンボルの形で返される.
- 関数を数値的に評価するとき,引数の持つ精度から得ることのできる精度以上は出せない.例えば,N[Gamma[27/10], 100]は高精度の答を返すが,N[Gamma[2.7], 100]の答は高い精度にはならない.
- 組込みの数学関数の数式的な導関数,積分,級数展開は,可能であれば,他の組込み関数を使い評価される.
数学定数
Mathematica に組み込まれている
Eや
Pi等の数学定数は次の特徴を持っている.
- 出力に必要な精度がどんなに高くても,任意の精度で数値を得ることができる.
プロテクト
Mathematica では組込みのオブジェクトの内容や動作を変更する指示を行うことができる.
組込み関数を不注意で書き換えることのないよう,通常の組込みオブジェクトは属性
Protectedを持つ.組込みオブジェクトを上書きするには,まず,この属性を除去しておく必要がある.これは,関数
Unprotectにより行うことができる.
Mathematica のいくつかの重要な組込みオブジェクトには,一切書き換えられないものもある.これらは属性
Protectedとともに属性
Lockedも持つ.属性
Lockedは,属性の変更を禁止するもので,それゆえ属性
Protectedの除去もできないのである.
短縮形の文字列パターン
StringMatchQ,
Names,
Remove等の関数では,
StringExpressionにより指定される完全な文字列パターンの他に,短縮形の文字列パターンも与えることができる.短縮形の文字列パターンには,通常の文字列を意味することのできる一定のメタ記号を含めることができる.
| * | 0個以上の記号 |
| @ | 大文字を除く1個以上の記号 |
| \\*,等 | 文字通りの*等 |
短縮形の文字列で使用できるメタ記号