我试图使用列表解析尽可能简洁地找到所有素数小于某个整数n
。我正在学习Haskell,这只是一个练习。我想写这样的:Haskell寻找素数的列表理解
isqrt :: Integral a => a -> a
isqrt = floor . sqrt . fromIntegral
primes :: Integral a => a -> [a]
primes n = [i | i <- [1,3..n], mod i k /= 0 | k <- primes (isqrt i)]
哪个当然不起作用。有一种方法可以在列表理解中获得列表理解吗?
这是我得到的错误:
exercise-99-1.hs:138:39: Not in scope: `k'
exercise-99-1.hs:138:46:
Illegal parallel list comprehension: use -XParallelListComp
exercise-99-1.hs:138:68: Not in scope: `i'
但是 - 我是不是真的期待语法甚至是合法的:-)
这样做的目的是为了尽可能直接翻译:“primes n
=该组奇数的i
小于n
使得i
不是整除任何k
,对于集合中的所有k
:primes (isqrt i)
” - 更多或更少。 (我希望我明白了吗?)
谢谢!
不起作用是非常无益的。发布错误。 – 2011-05-22 00:47:16
你可以把这个错误放入你的文章的正文吗?谢谢。 – 2011-05-22 00:59:56
这是一个:['[n | n < - [2..545],[] < - [[j | i < - [2..n-2],j < - [i * i,i * i + i..n],j == n]]]'](http://stackoverflow.com/questions/ 37103662/programming-haskell-code-list-of-primes/37148656#37148656) - 审判分裂和Eratosthenes筛的种类。 – 2016-07-31 00:10:30