Raku 如何使范围与..,但倒计时

Raku 如何使范围与..,但倒计时,raku,Raku,我想要一个从5到1的循环。我知道我可以很容易地使用。操作员: for 1..5 { .print } 12345 但是当使用。操作符并反转侧面时,它似乎无法生成for可以使用的有效范围: for 5..1 { .print } Nil 我知道我可以在Range对象上使用reverse方法: for (1..5).reverse { .print } 54321 但是,我希望。操作符有一种特定的方式在一次调用中生成号码列表。我的问题是,如何使用。运算符创建倒计时范围?只需使用5…1(注意3…

我想要一个从5到1的循环。我知道我可以很容易地使用
操作员:

for 1..5 { .print }
12345
但是当使用
操作符并反转侧面时,它似乎无法生成
for
可以使用的有效范围:

for 5..1 { .print }
Nil
我知道我可以在Range对象上使用
reverse
方法:

for (1..5).reverse { .print }
54321

但是,我希望
操作符有一种特定的方式在一次调用中生成号码列表。我的问题是,如何使用
运算符创建倒计时范围?

只需使用
5…1
(注意3
):

Range.reverse
的迭代器与forward的迭代器基本相同,只是从末尾到开头进行迭代。除了对
.reverse
进行额外的初始调用外,执行过程中应该没有差异

除了1..5{}的
实际上是静态优化的,根本不在内部使用
范围。我想这是一个进一步静态优化的机会

编辑:确保(1..5)的
。反向
以与1..5的
相同的方式进行优化。这使它快了大约6倍


编辑:截止到,对范围进行倒计时的最佳方法是对5…1进行
:这使用了与
(1…5)相同的优化。反转
,但可读性更强。

您还可以使用创建更一般的序列,包括
5…1
。效率不如射程。我相信是反向的。看来我会像刚才那样优化它。
^10。明天反向。这将使速度提高约75倍:-)
for 5...1 { .print }
54321