haskell - takeWhile在给出无限的素数列表时挂起

时间:2016-12-17 14:14:43

标签: haskell

所以,我正在处理一个PE问题,并且需要一个素数列表。所以我用Haskell方式做事并定义一个无限的素数列表,如下所示:

void af(int i) override { af<int>(i); }
void bf(int i) override { bf<int>(i); }

我想知道为什么这个看起来非常快的程序在小数字上永远占用了。然后我尝试了这个:

primes = 1 : 2 : filter isPrime [3,5..]

它甚至没有完成打印列表,然后它就挂在那里。我确定这只是一个愚蠢的初学者错误,因为我只与Haskell合作了几个月(我来自Lisp世界)。

提前致谢!

1 个答案:

答案 0 :(得分:0)

takeWhilefilter都不知道他们的论点。 filter将继续将isPrime应用于其无限列表的元素,而不知道它永远不会产生非空列表,并且takeWhile将继续要求更多值,而不知道filter永远不会返回大于或等于10的值。

当然,解决方案是提供isPrime的正确定义。