|
2.3.11 繰返しパターン

繰返しパターン
x__等の多重ブランクを使うことで,複数の任意式からなる列を含んだパターンを構築することができる.また,Mathematicaのパターンの繰返し演算子である..と...を使うことで,同じ形が任意回数繰り返し現れるパターンを構築することもできる.例えば,f[a..]は,f[a],f[a, a],f[a, a, a]のどの形の式でも表すことができる.
パターンf[a..]を使うことで,引数aを繰り返し使うことができる.
In[1]:= Cases[{ f[a], f[a, b, a], f[a, a, a] }, f[a..]]
Out[1]= 
このパターンを使うと,引数aを繰り返した後に引数bを繰り返し使える.
In[2]:= Cases[{ f[a], f[a, a, b], f[a, b, a], f[a, b, b] }, f[a.., b..]]
Out[2]= 
今度は,引数はaかbのどちらかであればよい.
In[3]:= Cases[{ f[a], f[a, b, a], f[a, c, a] }, f[(a | b)..]]
Out[3]= 
..と...を使えばどんな繰返しパターンでも表すことができる.もし,パターンが参照名付きの部分を含むならば,その部分に対応して実際に検索されるオブジェクトは全く同じでなければならない.
引数をペアの要素からなる1つのリストとした関数を定義する.
In[4]:= v[x:{{_, _}..}] := Transpose[x]
この場合,この定義が適用される.
In[5]:= v[{{a1, b1}, {a2, b2}, {a3, b3}}]
Out[5]= 
この定義において,すべてのペアの第2要素は同じでなければならない.
In[6]:= vn[x:{{_, n_}..}] := Transpose[x]
この場合,この定義が適用される.
In[7]:= vn[{{a, 2}, {b, 2}, {c, 2}}]
Out[7]= 
|