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
我做得不对( ahem )?
答案 0 :(得分:13)
看起来这里有一堆虫子......
首先,在这种特殊情况下不需要is assoc
。作为is equiv
copies all the options,不仅仅是优先级,&infix:<**>
是右关联的。
它不起作用的原因是因为some guy broke it in Apr. 2017,删除assoc
(基本上将其设置为左关联)。
我现在已经恢复了该提交,但in a branch因为还原练习RT#132711,这是assoc
的原始删除尝试解决的问题。 我将在本周末修复该错误,然后合并 更新:它实际上在EXPR解析器中爆炸。我的rakudo haxor级别还不够高,无法处理那件事,所以我现在就把它留给更聪明的人。 is equiv
的修复。
P.S。:你可以通过将句子写为&[**]
而不是&infix:<**>
来保存一些字符