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