为什么Perl 6的正确关联性不对?

bri*_*foy 14 perl6 associativity raku

Clickbaity标题,但它太多了,不能放弃.我有这个运算符,我希望是正确的关联:

sub infix:<?> ( Int:D \n, Int:D \m  --> Int:D )
    is assoc<right>
    is equiv(&infix:<**>)
    { n ** m }

put "2**2**2**2 = ",      2**2**2**2;
put "2?2?2?2 = ",         2?2?2?2;
put "2? (2? (2?2) ) = ",  2? (2? (2?2) );
Run Code Online (Sandbox Code Playgroud)

这是不正确的联想:

2**2**2**2 = 65536
2?2?2?2 = 256
2? (2? (2?2) ) = 65536
Run Code Online (Sandbox Code Playgroud)

我做得不对(咳咳)?

小智 14

看起来这里有一堆虫子......

首先,is assoc在这种特殊情况下不需要.由于is equiv 将所有的选项,而不是优先级,并且&infix:<**>是右结合.

它不起作用的原因是因为有人在2017年4月将其删除assoc(通常将其设置为左关联).

我现在已经恢复了那个提交,但是在一个分支中,因为恢复操作RT#132711,这是原始删除assoc尝试修复.我将在本周末修复该bug,然后合并修复程序is equiv. 更新:它实际上在EXPR解析器中爆炸.我的rakudo haxor级别还不足以处理那件事,所以我现在就把它留给更聪明的人.

PS:你可以通过编写内容&[**]而不是代码来保存一些字符&infix:<**>