User:WillNess

From HaskellWiki
Revision as of 11:45, 8 April 2015 by WillNess (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

I like this one-liner:

--   infinite folding due to Richard Bird
--   double staged primes production due to Melissa O'Neill
--   tree folding idea Heinrich Apfelmus / Dave Bayer 
primes = 2 : _Y ((3:) . gaps 5  
                      . foldi (\(x:xs) -> (x:) . union xs) []
                      . map (\p-> [p*p, p*p+2*p..])) 

_Y g = g (_Y g)  -- multistage production via Y combinator

gaps k s@(c:t)                        -- == minus [k,k+2..] (c:t), k<=c,
   | k < c     = k : gaps (k+2) s     --     fused for better performance
   | otherwise =     gaps (k+2) t     -- k==c

foldi is on Tree-like folds page. union and more at Prime numbers.

The constructive definition of primes is the Sieve of Eratosthenes:

using standard definition

  . . . or,   .

Trial division sieve is:

If you're put off by self-referentiality, just replace or on the right-hand side of equations with , but even ancient Greeks knew better.