RosettaCodeData/Task/Catalan-numbers/Haskell/catalan-numbers.hs
2023-07-01 13:44:08 -04:00

24 lines
497 B
Haskell

-- Three infinite lists, corresponding to the three
-- definitions in the problem statement.
cats1 :: [Integer]
cats1 =
(div . product . (enumFromTo . (2 +) <*> (2 *)))
<*> (product . enumFromTo 1) <$> [0 ..]
cats2 :: [Integer]
cats2 =
1 :
fmap
(\n -> sum (zipWith (*) (reverse (take n cats2)) cats2))
[1 ..]
cats3 :: [Integer]
cats3 =
scanl
(\c n -> c * 2 * (2 * n - 1) `div` succ n)
1
[1 ..]
main :: IO ()
main = mapM_ (print . take 15) [cats1, cats2, cats3]