表記法の演算子の優先順位

優先順位の決定法

新しい表記法または演算子の優先順位は,それを構成しているコンポーネントを調べて決定される.例えばの,演算子の,マッピングの優先順位に従ってグループ分けされる.ポジショニングボックスのグループ化は,一般に「基底要素」で決定される.例えば,式SubscriptBox[symb,sub]symb に基づいてグループ分けされる.しかし,構造的なボックスによっては,囲んでいる要素のグループ化にはボックスの内容が関係しないこともある.複合オブジェクトの優先順位は以下の表に従って決まる.

ボックスのタイプ
動作
AdjustmentBox, ErrorBox, StyleBox, SubscriptBox, SuperscriptBox, SubsuperscriptBox, UnderscriptBox, OverscriptBox, UnderoverscriptBox, TagBoxこれらのボックス構造は,その内容を外部から隔離しない.つまり,このようなボックスの内容はその周りの要素のグループ分けに影響を及ぼす
ButtonBox, FormBox, FractionBox, FrameBox, GridBox, InterpretationBox, RowBox, RadicalBox, SqrtBoxこれらのボックス構造では,その内容は外部から独立している,つまり,ボックスの内容はその周りの要素のグループ分けに影響しない

標準ボックスとその優先順位との関係

新しい複合演算子の構成要素に対応する優先順位を作成するという設計により,表記法は直観的に理解でき,一般に矛盾のないものとなる.例として,リングに対して可能な加算と乗算の表記法を考えてみる.

次の式はリング加算とリング乗算の表記法を定義する.
In[28]:=
Click for copyable input
これでWolfram言語はリング加算とリング乗算を含む式を解析し,フォーマットできるようになった.
In[30]:=
Click for copyable input
Out[30]=
In[31]:=
Click for copyable input
Out[31]//FullForm=

リング乗算演算子はリング加算演算子よりも優先順位が高い.これはの優先順位がより高いからである.さらに,この表記法は正しい構造を維持するために式に適切なカッコを加えるように自動的に設定される.

出力は正しい形式,スタイル,スペース,カッコを持つ.
In[32]:=
Click for copyable input
Out[32]=
しかしリング加算とリング乗算の上記の表記法には限界がある.
In[33]:=
Click for copyable input
Out[33]=
上記Notation文を削除して,その代わりにInfixNotationを使うことができる.
In[34]:=
Click for copyable input
これでの正しい挿入演算子として動作するようになった.
In[38]:=
Click for copyable input
Out[38]=

表記法におけるカッコ

表記法の中で,式をその他のカッコを使って囲むと,表記法のグループ分けが変わるだけでなく,カッコが入力式の中に存在しなければならなくなることに注目することは重要である.

次の式は丸カッコを使う表記法を定義する.
In[39]:=
Click for copyable input
In[40]:=
Click for copyable input
Out[40]//FullForm=
丸カッコがないと,入力はラッパーとして認識されない.
In[41]:=
Click for copyable input
Out[41]//FullForm=

表記法の優先順位の変更

内容を隔離するボックス構造で演算子や式を囲むことで,その演算子や式の周りにある要素を隔離することができる(上記表を参照).このカプセル化/隔離を行うためによく用いられるボックス構造はTagBoxである.さらに,TagBoxのオプションSyntaxFormを使うと,演算子の優先順位が変えられる.これについての詳細は,後ほどセクション「複雑なパターンと高度な機能」で述べる.

Domain に内在するボックス構造にはTagBoxが埋め込まれている.
In[21]:=
Click for copyable input
Out[21]=

Domain に埋め込まれたTagBoxが必要とされることには,いくつかの理由がある.それは,スタイルとZeroWidthTimesを指定するStyleBoxを含むため,自然な前置演算子がpartialをグループ分けしないようにするため,そしてカプセル化された部分に構文解析とフォーマットの規則が適用されるようにするためである.