In today’s Programming Praxis our task is to neatly display Pascal’s triangle. Let’s get started, shall we?
A quick import to making printing slightly more convenient:
Calculating Pascal’s triangle is trivial:
pascal :: [[Integer]] pascal = iterate (\prev -> 1 : zipWith (+) prev (tail prev) ++ ) 
To display the triangle correctly, we need to prepend the appropriate amount of spacing to each line based on the longest (i.e. last) line.
prettyPascal :: Int -> IO () prettyPascal n = mapM_ (\r -> printf "%*s\n" (div (longest + length r) 2) r) rows where rows = map (unwords . map show) $ take (n + 1) pascal longest = length $ last rows
An that’s all there is to it. A quick test to see if everything is working proprely:
main :: IO () main = prettyPascal 10