RosettaCodeData/Task/Leonardo-numbers/Haskell/leonardo-numbers-1.hs

26 lines
776 B
Haskell

import Data.List (intercalate, unfoldr)
import Data.List.Split (chunksOf)
--------------------- LEONARDO NUMBERS ---------------------
-- L0 -> L1 -> Add number -> Series (infinite)
leo :: Integer -> Integer -> Integer -> [Integer]
leo l0 l1 d = unfoldr (\(x, y) -> Just (x, (y, x + y + d))) (l0, l1)
leonardo :: [Integer]
leonardo = leo 1 1 1
fibonacci :: [Integer]
fibonacci = leo 0 1 0
--------------------------- TEST ---------------------------
main :: IO ()
main =
(putStrLn . unlines)
[ "First 25 default (1, 1, 1) Leonardo numbers:\n"
, f $ take 25 leonardo
, "First 25 of the (0, 1, 0) Leonardo numbers (= Fibonacci numbers):\n"
, f $ take 25 fibonacci
]
where
f = unlines . fmap (('\t' :) . intercalate ",") . chunksOf 16 . fmap show