为什么 Perl 6 的右结合性不对?

Why is Perl 6's right associativity not right?

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) );

这不是正确的结合:

2**2**2**2 = 65536
2↑2↑2↑2 = 256
2↑ (2↑ (2↑2) ) = 65536

我哪里做错了(咳咳)?

看起来这里有很多错误...

首先,在这种特殊情况下不需要 is assoc。如is equivcopies all the options,不仅是优先级,而且&infix:<**>是右结合的。

它不起作用的原因是 some guy broke it in Apr. 2017,通过删除 assoc(实质上将其设置为左关联)。

我现在恢复了那个提交,但是 in a branch because the revert exercises RT#132711,这是最初删除 assoc 试图修复的问题。 本周末我将尝试修复该错误,然后合并 is equiv 的修复。 更新:它实际上在 EXPR 解析器中爆炸。我的 rakudo haxor 水平还不够高,无法处理那件事,所以我暂时将它留给更聪明的人。

P.S.: 你可以通过将中缀写成 &[**] 而不是 &infix:<**>

来节省几个字符