|
2.1.7 式におけるレベル
関数Partを使えばMathematica式の特定部分だけを参照することができる.しかし,式の構造がほとんど一様ならば,複数部分に一括で参照することができた方が通常便利になる.
式の複数部分をまとめて指定するには,レベル指定に基づいた,一般化された方法を使う.多くのMathematica関数では,それらを式の特定部分に作用させるとき,作用対象になるレベル位置を指定することができるようになっている.
簡単な式を入力して,木表示させる.
In[1]:= (t = {x, {x, y}, y}) // TreeForm
Out[1]//TreeForm= 
式tのレベル1にあるxを探させる.1つだけ見付かる.
In[2]:= Position[t, x, 1]
Out[2]= 
今度は,レベル2まで探させる.レベル1,2の両方にあるxが探しあてられる.
In[3]:= Position[t, x, 2]
Out[3]= 
こうすると,検索をレベル2だけに絞ることができる.xは1つだけ見付かる.
In[4]:= Position[t, x, {2}]
Out[4]= 

レベルを使ったPositionの制御
ある式における部分のレベルは,単にこの部分が現れる位置までの,木構造の頂点からの距離ととらえることもできる.このとき,木の頂点はレベル0とする.
これは,レベルnにある部分は,n個の添数からなる列で完全に指定することができる,ということに相当する.

レベルの指定
式を入力し,木形式で表示させる.
In[5]:= (u = f[f[g[a], a], a, h[a], f]) // TreeForm
Out[5]//TreeForm= 
レベル2から下層方向にaを探させる.
In[6]:= Position[u, a, {2, Infinity}]
Out[6]= 
こうすると,式の頭部以外でfの現れる位置を得ることができる.
In[7]:= Position[u, f, Heads->False]
Out[7]= 
今度は,頭部も検索対象に含める.
In[8]:= Position[u, f, Heads->True]
Out[8]= 

レベルの判定と抽出
最上位からレベル2までの,uのすべての部分を列挙させる.
In[9]:= Level[u, 2]
Out[9]= 
レベル2に限って,部分を列挙させる.
In[10]:= Level[u, {2}]
Out[10]= 
普通のレベルの使い方が分かってきたところで,今度は,負のレベルの使い方を見てみる.レベルに負の値を指定すると,木構造の最下位から数えた部分を指すことができる.例えば,レベル-1には,木の葉の部分に当たるすべてのシンボルや数のオブジェクトが含まれる.
式uのレベル にあるすべての部分を列挙させる.
In[11]:= Level[u, {-1}]
Out[11]= 
式は,「深さ」を持つ.これは,TreeFormで表示されるレベルの最大数に等しい.一般に,ある式においてレベル-nは,深さをnとした要素式から構成されると定義される.
式g[a]の深さは2である.
In[12]:= Depth[ g[a] ]
Out[12]= 
レベル にあるuの部分は,深さがちょうど2の部分である.
In[13]:= Level[u, {-2}]
Out[13]= 
|