【发布时间】:2017-04-13 08:18:16
【问题描述】:
假设我有一个序列,其中我知道起点和终点,并且生成器很简单。我可以让它变得懒惰吗?
my @b = 0 ... 3;
say 'Is @b lazy? ' ~ @b.is-lazy; # Not lazy
我想将该已知列表与其自身组合未知次数,但不会立即生成整个列表。我想让@cross 偷懒:
my @cross = [X] @b xx $n;
我知道我可以通过其他简单的事情或编程来做到这一点(我的 Perl 5 Set::CrossProduct 就是这样做的),但我很好奇是否有一些我想念的简单和预期的方式。一些不涉及我自己的方式。
作为一个附带问题,序列的什么特性使它变得懒惰?它只是端点吗?如果生成器可以在它们之间产生无限值,是否存在具有已知端点的序列仍然可以是惰性的?我想知道我必须删除多少信息并尝试了这样的方法:
my $m = @*ARGS[0];
my @b = 0, * + $m ... ^ * > 3;
say 'Is @b lazy? ' ~ @b.is-lazy;
say '@b: ' ~ @b;
不过,这并不懒惰。
【问题讨论】:
标签: lazy-evaluation raku