懒惰过滤范围?

时间:2014-04-07 19:41:20

标签: scala

我试图使用以下代码行计算第一个x素数:

(1 to Int.MaxValue).filter(is_prime _).take(x)

然而,该程序并没有停止,我不得不关闭它(我不想等到达到Int.MaxValue)。我怎么能在正常时间重写这个以保持简洁?

2 个答案:

答案 0 :(得分:5)

您也可以使用Stream(或Iterator - 请参阅下面的评论)

Stream.from(1).filter(is_prime).take(x)

答案 1 :(得分:2)

Range将使用过滤器遍历整个集合。请尝试使用view代替:

(1 to Int.MaxValue).view.filter(is_prime _).take(x)