式におけるレベル

関数Partを使えばWolfram言語式の特定部分だけを参照することができる.しかし,式の構造がほとんど一様ならば,複数部分に一括で参照することができた方が通常便利になる.

式の複数部分をまとめて指定するには,レベル指定に基づいた,一般化された方法を使う.多くの Wolfram言語関数では,それらを式の特定部分に作用させるとき,作用対象になるレベル位置を指定することができるようになっている.

簡単な式を入力して,木表示させる.
In[1]:=
Click for copyable input
Out[1]//TreeForm=
のレベル1にあるを探させる.1つだけ見付かる.
In[2]:=
Click for copyable input
Out[2]=
今度は,レベル2まで探させる.レベル1,2の両方にあるが探し当てられる.
In[3]:=
Click for copyable input
Out[3]=
こうすると,検索をレベル2だけに絞ることができる.は1つだけ見付かる.
In[4]:=
Click for copyable input
Out[4]=
Position[expr,form,n]expr においてレベル n までに形 form が現れる位置を返す
Position[expr,form,{n}]厳密にレベル n での位置を返す

レベルを使ったPositionの制御

ある式における部分のレベルは,単にこの部分が現れる位置までの,木構造の頂点からの距離ととらえることもできる.このとき,木の頂点はレベル0とする.

これは,レベル n にある部分は,n 個の添数からなる列で完全に指定することができる,ということに相当する.

nレベル1〜n
Infinityレベル0を除く全レベル
{n}レベル n のみ
{n1,n2}レベル
Heads->True頭部を含む
Heads->False頭部を含まない

レベルの指定

式を入力し,木形式で表示させる.
In[5]:=
Click for copyable input
Out[5]//TreeForm=
レベル2から下層方向にを探させる.
In[6]:=
Click for copyable input
Out[6]=
こうすると,式の頭部以外での現れる位置を得ることができる.
In[7]:=
Click for copyable input
Out[7]=
今度は,頭部でのの出現も検索対象に含める.
In[8]:=
Click for copyable input
Out[8]=
Level[expr,lev]expr のレベル lev で指定されたレベルにある部分のリスト
Depth[expr]expr のレベル総数を返す

レベルの判定と抽出

最上位からレベル2までの,のすべての部分を列挙させる.
In[9]:=
Click for copyable input
Out[9]=
レベル2に限って,部分を列挙させる.
In[10]:=
Click for copyable input
Out[10]=

普通のレベルの使い方が分かってきたところで,今度は,負のレベルの使い方を見てみる.レベルに負の値を指定すると,木構造の最下位から数えた部分を指すことができる.例えば,レベル-1には,木の葉の部分に当たるすべてのシンボルや数のオブジェクトが含まれる.

のレベル-1にあるすべての部分を列挙させる.
In[11]:=
Click for copyable input
Out[11]=

TreeFormで示されるように,式は「深さ」を持つものと考えられる.一般に,ある式においてレベル-n は,深さを n とした要素式から構成されると定義される.

の深さは2である.
In[12]:=
Click for copyable input
Out[12]=
レベル-2にあるの部分は,深さがちょうど2の部分である.
In[13]:=
Click for copyable input
Out[13]=