|
2.5.13 発展:値のリストの操作

シンボルの値の参照と割当て
定義された式は,すべて変換規則のリストとして保管される.特定のシンボルが参照されるとき,それに関連付けられた規則のリストが選択され,それらの規則がすべて試される.
ほとんどの場合,ユーザ定義に関係付けられた変換規則そのものに直接アクセスする必要はないだろう.その代り,単に lhs = rhsと lhs =.を使い,規則を追加したり削除したりすることができる.しかし,場合によっては,実際の規則に直接アクセスできると便利になる.
fの定義式を作っておく.
In[1]:= f[x_] := x^2
fに関する定義に対応している明示的な規則を参照する.
In[2]:= DownValues[f]
Out[2]= 
DownValuesと UpValuesにより返される規則は,右辺と左辺がともに未評価の状態にある.左辺には評価保留の関数 HoldPatternで覆われ,規則は遅延され,右辺は即時的には評価されない.
2.5.6で説明したように,特殊な定義は,より一般的な定義よりも先に適用される.しかし,一般に任意な定義式の間で優先順位をはっきりさせるのは困難である.さらに, Mathematica内部で採用される順位ではなく,ユーザ自身で決定した順位を使いたい場合も出てくるだろう.これを行うには, DownValuesと UpValuesからリストで得られる規則を再構成すればよい.
オブジェクト gに関する定義を作る.
In[3]:= g[x_ + y_] := gp[x, y] ; g[x_ y_] := gm[x, y]
この定義のデフォルトの順位を確認しておく.
In[4]:= DownValues[g]
Out[4]= 
gの定義の並び順を逆にする.
In[5]:= DownValues[g] = Reverse[DownValues[g]]
Out[5]= 
|