一般的な表記と慣例

関数名

組込み関数の名前は以下のガイドラインに従って付けられる.

  • 名前は完成した英単語,もしくは標準的な数学の略語により構成する.アメリカ英語のスペルに従う.
  • 各単語は大文字で始める.
  • 通常,判定を行い,TrueFalseを返す関数の名前はで終える.
  • 人名に基づいた名前を持つ数学関数は,通常 PersonSymbol 形式にする.

関数の引数

通常,組込み関数の作用する式やオブジェクトは,第1引数として関数に与える.続く引数には補助的なパラメータを与える.

例外として以下の場合がある.

  • MapApply等の関数では,適用する関数は適用対象である式よりも前にくる.
  • ModuleFunction等のスコープの構文では,局所変数とパラメータを本体の式の前に置く.
    • WriteExport等の関数では,ファイル名を,そのファイルに書き込むオブジェクトの前に指定する.

    数学関数では,慣用的な数学表記で下付き文字として書かれる引数を,上付き文字として書かれる引数の前に指定する.

オプション

組込み関数によってはオプションを取るものがある.各オプションは名前を持ち,シンボル,場合によっては文字列として表現される.オプションの指定には規則の形式 または が使用される.このような規則は,関数のすべての引数の後に置かれる.複数のオプションを指定するときはどの順番でもよい.特にオプションを与えなかったものについては,オプションのデフォルト値が採用される.

Options[f]f のすべてのオプションのデフォルト値を返す
Options[expr]式に与えられたオプションを返す
Options[expr,name]式のオプション name の値を返す
AbsoluteOptions[expr,name]たとえAutomaticの設定になっていてもオプション name の絶対的な設定値を返す
SetOptions[f,name->value,]f のオプションのデフォルト値を設定する
CurrentValue[name]フロントエンドオプション name のオプション設定を与える.オプションを設定するためには,割当ての左辺で使うことができる

オプションに関連した操作

要素の番号付け

nn 番目の要素(から始める)
-n末尾から数えて n 番目の要素
0頭部を指す

要素の番号付け

部分列の指定

All全要素
None零要素
nから n 番目までの要素
-n末尾から n 個の要素
{n}n 番目の要素のみ
{m,n}m 番目から n 番目までの要素(ともに含まれる)
{m,n,s}ステップ sm 番目から n 番目までの要素

部分列の指定

の列指定は,m, , , から n 以下の最大要素までに対応する.

部分列の指定は,関数DropOrderingStringDropStringTakeTakeThreadで使用されている.

レベルの指定

nレベルn
InfinityレベルInfinity
{n}レベル n のみ
{n1,n2}レベル
Heads->True式の頭部を含む
Heads->False式の頭部を含まない

レベルの指定

非負の正数 n に対し,式のレベルは n 個の添字により指定される要素の集合と定義される.負数-n のレベルは式の部分のうち深さ n を持つものすべて,を表す.式の深さDepth[expr]は,式のどんな部分でも指定可能とするために必要な添字の個数に1を足した値で与えられる.通常,レベルによる適用範囲指定では頭部は含まれないが,Heads->Trueのオプションが与えられれば頭部も含めるようにできる.レベルは式全体を示す.レベルでは,シンボルやその他のオブジェクトのうち,それ以上部分式を持たないものが指定される.

形式でレベルの範囲を指定すると,木構造レベル よりも上のレベル,レベル よりも下のレベルに属さない部分式すべてが指定される. の符号が一致している必要はない.例えば,は最上位よりは下のレベルだが,木の葉よりは上のレベルに属する部分式を指定できる.

レベル指定はApplyCasesCountFreeQLevelMapMapIndexedPositionReplaceScan等の関数で使われる.ただし,関数によって適用レベルのデフォルトが違うので注意が必要である.

反復変数

{imax} 回反復する
{i,imax}i が1から まで刻み幅1で移動
{i,imin,imax}i から まで刻み幅1で移動
{i,imin,imax,di}i から まで刻み幅 di で移動
{i,list}ilist の連続した値を取る
{i,imin,imax},{j,jmin,jmax}, i から まで変化し,i の各値に対して j から までという風に変化する

反復の指定

反復変数はSumTableDoRange等の関数で使われる.

反復パラメータ 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インターフェースの局所変数

Wolfram言語におけるスコープ構文.上のグループの関数は辞書的に変数をスコープする

スコープ構文により,あるシンボルの名前あるいは値が局所的になるようにできる.

スコープ構文の中には辞書的にスコープするものもある.これは,指定された変数またはパターンの文字通りの例が,適切な値で置換されるということである.局所変数名が必要なときは,形式 xxx の名前のシンボルは一般に に変更される.ネストしたスコープ構文が評価されるとき,外側のスコープ構文のシンボルと名前が競合することがないように,新しいシンボルは自動的に内側の構文において生成される.

変換規則や定義が使われるとき,ルールの右辺に現れるパターン名の置換処理がReplaceAll()により実現される.このとき,右辺のスコープ構文に現れる他のオブジェクトを表現する必要が生じた場合,新しいシンボルが生成される.

Moduleは,評価されるたびに,本体式に現れる局所変数のすべてについて の形式の固有な名前を持つシンボルを生成する.

Blockは大域変数の値を局所化する.大域変数に依存するブロックのボディにおける評価はすべて,変数がボディに明示的に現れなくても局所的に指定された値を使用するが,後続する評価からのみ参照される.Blockのボディは大域変数を変更することもできるが,そのような変更はBlockが実行を終了するまでしか持続されない.

DynamicModuleは変数をノートブックのそれぞれのDynamicModule出力に局所化する.つまり,コピー・ペーストを使って生成されたそれぞれのDynamicModule出力で,各々で局所化された変数が使われるということである.

式の並び順

属性OrderlessSort等の関数で自動的に使用される.標準の並び順では以下の規約に従っている.

  • 整数,有理数,そして近似実数は,その値の順に並べられる.
  • 複素数はその実部の値の順に並べられ,また同じ実部のものは虚部の絶対値の順にされる.
  • シンボルは,名前順に並べられる.同じ名前のときは,コンテキスト順になる.
  • 式は,通常,深さ順に並べられる.より短い式が最初に置かれる.
  • ベキ乗と乗積は特別扱いされ,多項式の項に対応するように並べられる.
    • 文字列は,辞書順に並べられるが,大文字は小文字の後に置かれる.

    後に,スクリプト体,ゴシック体,二重書体,ギリシャ文字,そして,ヘブライ文字が続く.また,数学演算子は優先度の高い順に並べられる.

数学関数

Wolfram言語に組み込まれているLog[x]BesselJ[n,x]等の数学関数は下記の共通な特徴を持っている.

  • 関数は属性Listableを持つ.このため,引数にリストが与えられたとき,関数は各要素に自動的に適用される.
  • 属性NumericFunctionを持つ.このため,引数が数値なら数値を返す.
  • 整数,有理数,代数式に対しては厳密値を返す場合がある.
  • 引数に整数しか取らない関数を除き,Wolfram言語の数学関数はどんな精度でも評価可能である.また,引数はどんな複素数でもよい.関数が特定の値において未定義になるときは,結果はシンボルの形で返される.
  • 関数を数値的に評価するとき,引数の持つ精度から得ることのできる精度以上は出せない.例えば,N[Gamma[27/10],100]は高精度の答を返すが,N[Gamma[2.7],100]の答は高い精度にはならない.
  • 組込みの数学関数の数式的な導関数,積分,級数展開は,可能であれば,他の組込み関数を使い評価される.

数学定数

Wolfram言語に組み込まれているEPi等の数学定数は次の特徴を持っている.

  • 定数自体,そのままでは値を持たない.
  • 出力に必要な精度がどんなに高くても,任意の精度で数値を得ることができる.
  • NumericQや他の関数において,定数は数値型のオブジェクトとして扱われる.
  • 属性Constantを持つ.このため,微分を行う際に定数として扱われる.

プロテクト

Wolfram言語では組込みのオブジェクトの内容や動作を変更する指示を行うことができる.

組込み関数を不注意で書き換えることのないよう,通常の組込みオブジェクトは属性Protectedを持つ.組込みオブジェクトを上書きするには,まず,この属性を除去しておく必要がある.これは,関数Unprotectにより行うことができる.

Wolfram言語のいくつかの重要な組込みオブジェクトには,一切書き換えられないものもある.これらは属性Protectedとともに属性Lockedも持つ.属性Lockedは,属性の変更を禁止するもので,それゆえ属性Protectedの除去もできないのである.

短縮形の文字列パターン

StringMatchQNamesRemove等の関数では,StringExpressionにより指定される完全な文字列パターンの他に,短縮形の文字列パターンも与えることができる.短縮形の文字列パターンには,通常の文字列を意味することのできる一定のメタ記号を含めることができる.

*0個以上の記号
@大文字を除く1個以上の記号
\\*,等文字通りの

短縮形の文字列で使用できるメタ記号