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

優先順位の決定法

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

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

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

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

次の式はリング加算とリング乗算の表記法を定義する.
これでWolfram言語はリング加算とリング乗算を含む式を解析し,フォーマットできるようになった.

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

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

表記法におけるカッコ

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

次の式は丸カッコを使う表記法を定義する.
丸カッコがないと,入力はSemanticラッパーとして認識されない.

表記法の優先順位の変更

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

Domain に内在するボックス構造にはTagBoxが埋め込まれている.

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