Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / パターン /

2.3.3 パターンの参照名

特に変換規則を作る際は,パターンに名前を付けておき,それを参照することができるようにしておきたい.例えば,パターンに参照名x_を付けておけば,パターンで抽出される式が実際に何であれ,その式の参照はxでできる.参照名は,例えば,変換規則の右辺で使われる.

x_のような名前の付いたパターンを使う際,気を付けなければいけない点として,xの付いたすべてのブランクは,必ず同じ式を表すものでなければならない,ということがある.

このため,f[x_, x_]は,2引数を全く同じものとした式fしか表すことができない.これに対して,f[_, _]は,引数xyを必ずしも同じものとしないf[x, y]の形を持った式を表すことができる.

この変換規則を使うと,引数のパターンは同じであるから,同じ引数を持った関数のリスト要素しか変換の対象にはならない.

In[1]:= {f[a, a], f[a, b]} /. f[x_, x_] -> p[x]

Out[1]=

単一ブランクのパターンに限らず,任意形のパターンにも名前を付けることができる.任意パターンpatternxと呼びたければ,x:patternと入力する.この方法で名前を付けておけば,パターンがブランク以外の要素で構成された特別なものでも,変換規則の右辺で参照できるようになる.

参照名があるパターン

パターン_^_の全体に参照名を付ける.参照名を使い,変換規則の右辺でこのパターンを参照することができるようになる.

In[2]:= f[a^b] /. f[x:_^_] -> p[x]

Out[2]=

ここでは,指数部はnとし,オブジェクト全体はxとした.

In[3]:= f[a^b] /. f[x:_^n_] -> p[x, n]

Out[3]=

1つのパターンを2回使い,そのどちらも同じ名前で参照されたとすると,このパターンで適合可能となる2つの式は,全く同じ構成の式に限られてしまう.

この場合は,どちらのリスト要素でもパターンにマッチする.

In[4]:= {f[h[4], h[4]], f[h[4], h[5]]} /. f[h[_], h[_]] -> q

Out[4]=

今度は,引数のパターンに同じ名前を指定したので,同じhの引数を持つ最初のリスト要素だけがマッチする.

In[5]:= {f[h[4], h[4]], f[h[4], h[5]]} /. f[x:h[_], x_] -> r[x]

Out[5]=



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.