Я учусь и играю с Haskell, в частности изучаю List Compceptionsion, поэтому я попытался выпустить тот, который представляет «все» простые числа.
Я вышел с этим:
[x | x <- 2:[3,5..], and( map (\y -> 0 /= x `mod` y) (take (x`quot`4-1) [3,5..]))]
И первые N простых чисел могут быть получены с помощью функции take:
take N [x | x <- 2:[3,5..], and( map (\y -> 0 /= x `mod` y) (take (x`quot`4-1) [3,5..]))]
, которая работает без бесконечных циклов благодаря ленивой оценке бесконечных диапазонов.
Значение: Это понимание списка всех «нечетных чисел плюс число 2»
[x | x <- 2:[3,5..], ... ]
с условием, что для каждого числа в списке «всегда должно быть верно»...
and( ... )
... что "это не 0 остаток" числа, примененного ко всем ...
map (\y -> 0 /= x `mod` y)
... "первая половина", котораяменьше числа кандидата ...
take (x`quot`4-1)
... из набора "всех нечетных чисел".
[3,5..]
Я слишком новичок в Haskell, чтобы оценить эффективностьдля реального применения (вероятно, хорошо только для небольших чисел), но я нахожу классным, что в Haskell можновыразить список простых чисел таким образом