一般的な表記と慣例
組込み関数によってはオプションを取るものがある.各オプションは名前を持ち,シンボル,場合によっては文字列として表現される.オプションの指定には規則の形式 name->value または name:>value が使用される.このような規則は,関数のすべての引数の後に置かれる.複数のオプションを指定するときはどの順番でもよい.特にオプションを与えなかったものについては,オプションのデフォルト値が採用される.
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 | 1から n 番目までの要素 |
-n | 末尾から n 個の要素 |
{n} | n 番目の要素のみ |
{m,n} | m 番目から n 番目までの要素(ともに含まれる) |
{m,n,s} | ステップ s で m 番目から 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 までという風に変化する |
反復パラメータ 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インターフェースの局所変数 |
スコープ構文の中には辞書的にスコープするものもある.これは,指定された変数またはパターンの文字通りの例が,適切な値で置換されるということである.局所変数名が必要なときは,形式 xxx の名前のシンボルは一般に xxx$に変更される.ネストしたスコープ構文が評価されるとき,外側のスコープ構文のシンボルと名前が競合することがないように,新しいシンボルは自動的に内側の構文において生成される.
変換規則や定義が使われるとき,ルールの右辺に現れるパターン名の置換処理がReplaceAll(/.)により実現される.このとき,右辺のスコープ構文に現れる他のオブジェクトを表現する必要が生じた場合,新しいシンボルが生成される.
Blockは大域変数の値を局所化する.大域変数に依存するブロックのボディにおける評価はすべて,変数がボディに明示的に現れなくても局所的に指定された値を使用するが,後続する評価からのみ参照される.Blockのボディは大域変数を変更することもできるが,そのような変更はBlockが実行を終了するまでしか持続されない.
DynamicModuleは変数をノートブックのそれぞれのDynamicModule出力に局所化する.つまり,コピー・ペーストを使って生成されたそれぞれのDynamicModule出力で,各々で局所化された変数が使われるということである.
- 関数は属性Listableを持つ.このため,引数にリストが与えられたとき,関数は各要素に自動的に適用される.
- 属性NumericFunctionを持つ.このため,引数が数値なら数値を返す.
- 引数に整数しか取らない関数を除き,Wolfram言語の数学関数はどんな精度でも評価可能である.また,引数はどんな複素数でもよい.関数が特定の値において未定義になるときは,結果はシンボルの形で返される.
- 関数を数値的に評価するとき,引数の持つ精度から得ることのできる精度以上は出せない.例えば,N[Gamma[27/10],100]は高精度の答を返すが,N[Gamma[2.7],100]の答は高い精度にはならない.
- NumericQや他の関数において,定数は数値型のオブジェクトとして扱われる.
- 属性Constantを持つ.このため,微分を行う際に定数として扱われる.
組込み関数を不注意で書き換えることのないよう,通常の組込みオブジェクトは属性Protectedを持つ.組込みオブジェクトを上書きするには,まず,この属性を除去しておく必要がある.これは,関数Unprotectにより行うことができる.
Wolfram言語のいくつかの重要な組込みオブジェクトには,一切書き換えられないものもある.これらは属性Protectedとともに属性Lockedも持つ.属性Lockedは,属性の変更を禁止するもので,それゆえ属性Protectedの除去もできないのである.
StringMatchQ,Names,Remove等の関数では,StringExpressionにより指定される完全な文字列パターンの他に,短縮形の文字列パターンも与えることができる.短縮形の文字列パターンには,通常の文字列を意味することのできる一定のメタ記号を含めることができる.