gpt4 book ai didi

lazy-evaluation - 意外的非懒惰

转载 作者:行者123 更新时间:2023-12-04 04:28:42 30 4
gpt4 key购买 nike

我这周写了这段代码 challenge产生丑陋的数字。

sub factors( $n ) {
if $n > 1 {
$_, |factors $n div $_
given ( grep $n %% *, 2..* ).first } }

.say for ( 1, |grep *.&factors.all ∈ ( 2, 3, 5 ), 2..* )[^150];
这是有效的,从某种意义上说,它产生了正确的输出,但它的行为并不懒惰:输出不会立即开始,而是在开始 30 秒后开始。
但是,当我删除索引并遍历裸序列时
.say for 1, |grep *.&factors.all ∈ ( 2, 3, 5 ), 2..*;
我按预期立即得到输出。
这是一个错误,是吗?

最佳答案

这不是错误(尽管可能记录得更好)。使用 [] 进行索引将它索引的元素具体化,所以 [^150]计算前 150 个元素的(非惰性)列表。 (列表的其余部分保持惰性,但那些初始元素不会)。
如果你想懒惰地迭代,你可以使用 &head相反,它会给你以下最后一行:

.say for ( 1, |grep *.&factors.all ∈ ( 2, 3, 5 ), 2..* ).head(150);

关于lazy-evaluation - 意外的非懒惰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68536645/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com