Difference between revisions of "User:WillNess"
From HaskellWiki
Line 5:  Line 5:  
<haskell> 
<haskell> 

primes = 2 : g (fix g)  double staged production idea due to M. O'Neill 
primes = 2 : g (fix g)  double staged production idea due to M. O'Neill 

−  +  where 

−  g xs = 3 : (gaps 5 $ foldi (\ 
+  g xs = 3 : (gaps 5 $ foldi (\q:qs > (q:) . union qs) 
−  [[p*p, p*p+2*p..]  p < xs]) 
+  [[p*p, p*p+2*p..]  p < xs]) 
−  gaps k s@(x:xs)   k<=x = minus [k,k+2..] xs 

−   inlined to avoid a space leak 

−  = if k < x 

−  then k : gaps (k+2) s 

−  else gaps (k+2) xs 

fix g = xs where xs = g xs 
fix g = xs where xs = g xs 

+  
+  gaps k s@(x:xs) = if k < x   k<=x = minus [k,k+2..] xs 

+  then k : gaps (k+2) s  inlined to avoid a space leak 

+  else gaps (k+2) xs 

</haskell> 
</haskell> 

Revision as of 12:58, 7 August 2011
I am a newbie, interested in Haskell.
I like this:
primes = 2 : g (fix g)  double staged production idea due to M. O'Neill
where
g xs = 3 : (gaps 5 $ foldi (\q:qs > (q:) . union qs)
[[p*p, p*p+2*p..]  p < xs])
fix g = xs where xs = g xs
gaps k s@(x:xs) = if k < x   k<=x = minus [k,k+2..] xs
then k : gaps (k+2) s  inlined to avoid a space leak
else gaps (k+2) xs
foldi
is on Treelike folds. More at Prime numbers.