|
2.3.9 省略可能な引数とデフォルトの引数
場合によっては,引数が省略されたなら「デフォルト」の引数が自動的に代替されるように関数定義を設定しておきたい.パターンx_:vは,省略可能なオブジェクトを表す.実際に省略されると,引数にはvがあてがわれる.
関数jを定義する.必ず指定されなければならない引数としてxを与え,省略可能な引数としてyとzを加える.デフォルトには,yとzに対して,それぞれ1と2が使われる.
In[1]:= j[x_, y_:1, z_:2] := jp[x, y, z]
zにはデフォルト値が使われる.
In[2]:= j[a, b]
Out[2]= 
今度は,yにもデフォルト値が使われる.
In[3]:= j[a]
Out[3]= 

デフォルト値を持ったパターンオブジェクト
標準的なMathematica関数の中には,引数のデフォルト値が組込み済みのものがある.わざわざx_:vの書式でデフォルト値を指定する必要はない.x_.を付加しておけば,組込み済みのデフォルト値を使ってくれる.

省略可能な部分を持ったパターンのいくつか
この場合,yにデフォルト値0が使われ,aは,パターンx_ + y_.にマッチする.
In[4]:= {f[a], f[a + b]} /. f[x_ + y_.] -> p[x, y]
Out[4]= 
加法式にいくつ項があろうと,Plusは平坦な関数であるから,x_ + y_のようなパターンは,その式にマッチすることができる.しかし,このパターンは,a等の単一項はマッチすることができない.ただし,パターンx_ + y_.は省略可能な部分を含んでいるので,x_とy_の両方を持つ項,または,yを0とした単一項x_を持つ項からなる明示的な加法式にマッチすることができる.
x_.のような構造体を使うことで,違った構造の複数の式にマッチする単一パターンを簡単に構築することができる.これは,同じ構造を持たない数学的には等しい複数の形にマッチさせたい場合に特に便利である.
g[a^2]はパターンにマッチするがg[a + b]はマッチしない.
In[5]:= {g[a^2], g[a + b]} /. g[x_^n_] -> p[x, n]
Out[5]= 
指数部が省略可能なパターンを与えたので,両方にマッチさせることができる.
In[6]:= {g[a^2], g[a + b]} /. g[x_^n_.] -> p[x, n]
Out[6]= 
パターンa_. + b_. x_は,x_の1次関数なら何にでもマッチする.
In[7]:= lin[a_. + b_. x_, x_] := p[a, b]
この場合では,b 1である.
In[8]:= lin[1 + x, x]
Out[8]= 
今度は,b 1,そして,a 0である.
In[9]:= lin[y, y]
Out[9]= 
PlusやTimes等の標準的なMathematica関数は,引数のための,あらかじめ組み込まれたデフォルト値を備えている.また,ユーザ定義の関数についてもデフォルト値を設けておくことができる.詳しくは,A.5.1を参照のこと.
|