当前位置: 首页 > 知识库问答 >
问题:

如何在Raku中无限懒散地循环列表?

颛孙英勋
2023-03-14

这主要是为了让你知道Raku有多棒。

a, b, c, a, b, c, ...

我至少能想到几个。

更繁琐的脚踏实地的方法是将@array[ mod length-of-@array] 映射到惰性范围0..INF上。在perl6repl中:

> my @ar=<a b c>
[a b c]
> (0..Inf).map({ @ar[$_ % @ar.elems] }).[0..100]
(a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a ...)

一个更酷的解决方案(我认为)是让你先把你的列表变成一张单子,然后对这个单子无限期地应用重复操作符:

> my @ar=<a b c>
[a b c]
> (|@ar xx *).[0..100]
(a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a ...)

这是对@Brad Gilbert的答案略作阐述。»~»运算符在»超运算符中包装字符串连接~,这导致将包装后的二进制运算符应用于从两个列表中顺序选择的元素。

因此,为了实现我想要的(列表循环到一个期望的长度,比如100),一个人可以做

<a b c> <<~>> ("" xx 100)

这就产生了

(a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a b c a)
    null
<a b c> <<~>> ("" xx *)
List on right side of hyperop of infix:<~> is known to be infinite
  in block <unit> at <unknown file> line 1

共有1个答案

陶博涉
2023-03-14

当它可以写得这么短的时候,为什么要为此添加一个特性。尤其是因为这可能是一个罕见的事件,你会需要这样的东西。

|< a b c > xx *

但是有一个例外,如果您使用«~»这样的东西,它会为您扩展它。

< a b c > «~» (1..10)
# (a1 b2 c3 a4 b5 c6 a7 b8 c9 a10)
 类似资料:
  • 尝试逐步将一些Perl脚本转换为Raku。即使在这里浏览了大量内容并深入阅读了《学习Perl6》之后,我仍然坚持下面的一条。 我无法取得进展的部分是最后一个循环(转换为);获取键并按月名和日号排序看起来是不可能的,但我确信这是可行的。 任何关于如何用“惯用的”语法实现这一点的提示都是非常受欢迎的。

  • 问题内容: 我有一个运行在无限循环上的脚本,并将其添加到数据库中,并且执行了一些我不能只停止一半的事情,所以我不能只按ctrl + C并停止它。 我希望能够以某种方式停止while循环,但是让它在停止之前完成最后一次迭代。 让我澄清一下: 我的代码看起来像这样: 我希望能够在结束或开始时中断while循环,但不要在执行操作之间中断,因为那样会很不好。 而且我不希望它在每次迭代后问我是否要继续。 感

  • 我需要在eventmachine上有一个无限循环,它不断地读取redis队列。下面是我的代码。递归是正确的方法吗?我尝试了loop,但无法以那种方式工作。

  • 问题内容: 尽管我知道问这个问题会有点愚蠢,但我仍然想查询有关它的技术观点的更多信息。 无限循环的简单示例: 如何从此类外部中断(停止)此无限循环(例如,在继承的帮助下)? 问题答案: 即使写这篇文章我也觉得很脏,但是… 从不同的线程,你可以调用一个实现,抛出一个当你调用。

  • 我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类

  • 问题内容: 我想在SQL Server 2005中使用无限循环,并在某些情况下使用关键字退出它。 不起作用,所以我必须使用。有没有更好的方法来组织无限循环? 我知道我可以使用,但是结构上看起来更好。 问题答案: 除了其他答案所建议的以外,我还经常在SQL“ infintie”循环中添加“超时”,如以下示例所示: 我发现上述技术在从长轮询AJAX后端调用的存储过程中很有用。在数据库端进行循环可以使应