Mathematicaプログラミング
■ パターン
関数の引数や式の書き換えの際に利用するパターンに関して解説を行う。
MathchQ
MathchQは
MatchQ[expr, form]
についてパターンformが式exprにマッチする場合はTrueを返す関数である。
In[1]:= MatchQ[a, a] Out[1]= True In[2]:= MatchQ[a, b] Out[2]= False
「_」
「_」は任意の1個の式という意味になる。
In[1]:= MatchQ[foo, _]
Out[1]= True
In[2]:= MatchQ[{6,3}, _]
Out[2]= True
In[3]:= MatchQ[bar[a, b], bar[_]]
Out[3]= False
In[4]:= MatchQ[bar[a, b], bar[_, b]]
Out[4]= True
なお、正式には「_」はBlank[]と言う式である。
In[1]:= FullForm[_] Out[1]//FullForm= Blank[]
「__」
「__」は任意の1個以上の式という意味となる。
なお、正式には「__」はBlankSequence[]と言う式である。
In[1]:= FullForm[__] Out[1]//FullForm= BlankSequence[]
「___」
「__」は任意の0個以上の式という意味となる。
なお、正式には「___」はBlankNullSequence[]と言う式である。
In[1]:= FullForm[___] Out[1]//FullForm= BlankNullSequence[]
マッチするヘッドの制限
「_List」のように「_」のあとにシンボルを記述するとマッチする 式のヘッドを制限することができる。 (この場合は任意の一つのリストにマッチするようになる)
In[1]:= MatchQ[388, _]
Out[1]= True
In[2]:= MatchQ[388, _List]
Out[2]= False
In[3]:= MatchQ[{5,7}, _List]
Out[3]= True
In[4]:= MatchQ[foo["aaa"], _foo]
Out[4]= True
In[5]:= MatchQ[543, _Integer]
Out[5]= True
In[6]:= MatchQ[34, _Symbol]
Out[6]= False
In[7]:= MatchQ[aaa, _Symbol]
Out[7]= True
In[8]:= MatchQ[x^10, x^_Integer]
Out[8]= True
In[9]:= MatchQ[x^10, x^_Real]
Out[9]= False
マッチした式に対するラベリング
「x_」のように「_」の前にシンボルを記述するとマッチする 式に対してラベルをつけることができる。
In[1]:= hoo[x_Integer] := x+1 In[2]:= hoo[14] Out[2]= 15
この例ではhooの整数の引数にマッチした物(今回の場合は14) にxという名前をつけている。