演算子の優先度

src/Init/Notation.lean からの情報。

構文範疇precは項の優先度を表す値(の表現)のことで:

  • 項の優先度: max = 1024, arg = 1023, lead = 1022, min = 10
  • パイプ記号 <|, |> は優先度は min = 10
  • =, ∈ が50
  • 足し算は65、
  • 規表現風接尾辞の *,+,? は arg = 1023

Swiftの演算子がよく整理されている。Leanの値は後で埋める。

演算子 説明 結合律 優先順位 Lean
<< 左ビットシフト 無結合 160
>> 右ビットシフト 無結合 160
* 乗算 左結合 160
/ 除算 左結合 160
% 剰余 左結合 160
& ビットAND 左結合 160
+ 加算 左結合 140 65
- 減算 左結合 140
縦棒 ビットOR 左結合 140
^ ビットXOR 左結合 140
< 未満 無結合 130
<= 以下 無結合 130
> より上 無結合 130
>= 以上 無結合 130
== イコール 無結合 130 50
!= ノットイコール 無結合 130
~= パターンマッチ 無結合 130
&& 論理AND 左結合 120
二本縦棒 論理OR 左結合 110
?: 三項条件 右結合 100
= 代入 右結合 90
= 乗算と代入 右結合 90
+= 加算と代入 右結合 90
&:&= 論理ANDと代入 右結合 90

優先度のグループ分けは:

  • BitwiseShiftPrecedence << など 160
  • MultiplicationPrecedence * など 160
  • AdditionPrecedence + など 140
  • RangeFormationPrecedence ... など 135
  • CastingPrecedence is など 132
  • NilCoalescingPrecedence ?? など 131
  • ComparisonPrecedence = など 130
  • LogicalConjunctionPrecedence && など 130
  • LogicalDisjunctionPrecedence || など 120
  • TernaryPrecedence ?: など 100
  • AssignmentPrecedence = など 90

130代が混みすぎ。