繁体   English   中英

列表理解Haskell

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM