[英]List comprehensions in Haskell
我想在Haskell中编写一个简单的列表理解方法,其中包含无限质数的列表。
我的尝试:
isPrime 1 = False
isPrime x = and [x `mod` z /= 0 | z <- [1..x-1]]
primes = [x | x <-[1..], isPrime x ]
但是,当我尝试take 10 primes
在控制台上运行它时,它会卡住! 有什么问题
问题出在您的isPrime函数中:
isPrime x = and [x `mod` z /= 0 | z <- [1..x-1]]
您将每个元素从1取到x-1,然后检查余数是否不等于零。 如果任何值等于零,则isPrime将返回false。
但是,您的列表理解从1开始,每个数字都可以被其整除。
因此,我们只需要从两个开始。
isPrime x = and [x `mod` z /= 0 | z <- [2..x-1]]
现在它可以按预期工作了。
λ> take 10 primes
[2,3,5,7,11,13,17,19,23,29]
如果在较大的功能中遇到问题,请尝试将其分解并运行每个零件,以确保结果符合预期。 在这种情况下, isPrime 2 == False
提示问题出在哪里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.