RosettaCodeData/Task/Loops-Increment-loop-index-within-loop-body/Haskell/loops-increment-loop-index-within-loop-body-2.hs
2023-07-01 13:44:08 -04:00

19 lines
532 B
Haskell

import Data.Numbers.Primes
import Data.List (intercalate)
import Data.List.Split (chunksOf)
series :: Integer -> Integer -> [(Integer, Integer)]
series = go
where
go i n
| isPrime i = (n, i) : go (i + i) (succ n)
| otherwise = go (succ i) n
showPair :: (Integer, Integer) -> String
showPair (i, n) = show i ++ " -> " ++ showInteger n
showInteger :: Integer -> String
showInteger = reverse . intercalate "," . chunksOf 3 . reverse . show
main :: IO ()
main = mapM_ (putStrLn . showPair) (take 42 $ series 42 1)