|
2.3.2 パターンにマッチする式の検索

パターンマッチングによるリスト要素の抽出
パターンx^_にマッチする要素を入力リストから検索させる.
In[1]:= Cases[ {3, 4, x, x^2, x^3}, x^_ ]
Out[1]= 
マッチした要素がいくつあったか数えさせる.
In[2]:= Count[ {3, 4, x, x^2, x^3}, x^_ ]
Out[2]= 
Casesのような関数はリストだけでなく式にも有効である.レベルを限定しておくことで抽出する部分を特定することもできる.

パターンマッチングによる式の部分の抽出
これは,nによる指数のリストを返す.
In[3]:= Cases[ {3, 4, x, x^2, x^3}, x^n_ -> n]
Out[3]= 
パターン_Integerは,どんな整数にも マッチする.この例では,すべてのレベルに現れる整数が検索され,結果がリスト形式で返される.
In[4]:= Cases[ {3, 4, x, x^2, x^3}, _Integer, Infinity]
Out[4]= 

抽出数が制限されたパターンマッチングによる式の部分抽出
レベルが何であれxのベキ数である項を最初の2つまで検索して,リスト内の位置を求める.
In[5]:= Position[ {4, 4 + x^a, x^b, 6 + x^5}, x^_, Infinity, 2]
Out[5]= 
ベキ項の位置が分かったら,そこに別のものを入れる.Positionに与えたリストは,1.8で述べられたように,そのまま,ExtractやReplacePartで直接使えることに注目.
In[6]:= ReplacePart[ {4, 4 + x^a, x^b, 6 + x^5}, zzz, % ]
Out[6]= 

パターンマッチングによる式の部分削除
パターンx^n_にマッチしたリスト要素を削除する.
In[7]:= DeleteCases[ {3, 4, x, x^2, x^3}, x^n_ ]
Out[7]= 
整数を全レベルから削除する.
In[8]:= DeleteCases[ {3, 4, x, 2+x, 3+x}, _Integer, Infinity ]
Out[8]= 

パターンマッチングによる式の組替え
まず,変換規則の左辺のパターンを使い,2項の和として組み替える.その後に,変換規則の右辺を適用する.
In[9]:= ReplaceList[a + b + c, x_ + y_ -> g[x, y]]
Out[9]= 
同じ要素のペアをすべて探し出す.3重ブランク(___)は要素の任意の列を表す.
In[10]:= ReplaceList[{a, b, b, b, c, c, a}, {___, x_, x_, ___} -> x]
Out[10]= 
|