我有一个由以下列表理解初始化的无限素数列表:
primes = [x | x <- [2..], 0 `notElem` map (x `mod`) [2..(x `quot` 2)]]
这允许我进行类似
17 `elem` primes
的检查。确认 17 是素数。但是,当我检查列表中是否有非质数时,程序不会停止计算。我认为这是因为它没有意识到如果在大于该数字的素数之前在列表中找不到该数字,则在列表中的任何地方都找不到它。因此,Haskell 中是否有任何方式向编译器表明列表仅包含升序数字,以便 elem
如果检查到达列表中大于其第一个参数的数字,它会知道停止并返回 false 吗?
最佳答案
一种可能性是使用 dropWhile
:
isPrime n = (head $ dropWhile (< n) primes) == n
关于list - 如何表示一个无限列表要为 elem 检查升序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556683/