**

万が一入った場合に後悔しないよう **実装した

結合の仕方が覚えづらい演算子だと感じていたが、改めて調べるとさもありなん

~2**2 -2**2 2**2**3 assoc prec
Python -5 -4 256 right ** > ~ = -
Ruby 9 -4 256 right ~ > ** > -
Groovy 9 -4 64 left ~ > ** > -

言語によってまちまちだったのだ。

Perl/Python
業界標準Coco の挙動は取り敢えずこれに合わせた。
Ruby
優先順位が単項演算子の間に挟まっている。誰得。
Groovy
Ruby を真似つつ、しかし結合は左に。誰得 ** 2。
追記

一眠りして思い直し、結合則変更した

~2**2 -2**2 2**2**3 assoc prec
Coco 9 4 64 left ~ = - > **

上記言語のどれとも異なるが、そもそもばらばらなので大丈夫だ、問題無い。
理由:

  • 23 のような数学的表記ができない以上、右結合は混乱の元。
  • 二項演算子が単項演算子の優先順位を上回るのは非直感的。
  • (-1) とか書きたくない。

docs.python.org には

The power operator binds more tightly than unary operators on its left; it binds less tightly than unary operators on its right

http://docs.python.org/reference/expressions.html#the-power-operator

とあり、わけがわからないよ。

余談

**= とか今回初めて書いたかも。