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という名前をつけている。