所以,我正在处理一个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世界)。
提前致谢!
答案 0 :(得分:0)
takeWhile
和filter
都不知道他们的论点。 filter
将继续将isPrime
应用于其无限列表的元素,而不知道它永远不会产生非空列表,并且takeWhile
将继续要求更多值,而不知道filter
永远不会返回大于或等于10的值。
当然,解决方案是提供isPrime
的正确定义。