打印没有括号的列表列表

时间:2013-10-08 19:10:21

标签: haskell

我试图将Pascals三角形打印到某个任意行,经过一些想法我想出了这个解决方案:

next xs = zipWith (+) ([0] ++ xs) (xs ++ [0])
pascal n = take n (iterate next [1])

main = do
   n <- readLn :: IO Int
   mapM_ putStrLn $ map show $ pascal n

除印刷外,其效果很好。当我申请pascal 4时,我得到:

[1]
[1,1]
[1,2,1]
[1,3,3,1]

当我真正想要的是这个时候:

1
1 1
1 2 1
1 3 3 1

我有什么方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:13)

定义自己的漂亮打印功能:

import Data.List (intercalate)

show' :: Show a => [a] -> String
show' = intercalate " " . map show

答案 1 :(得分:6)

你可以unwords / unlines:

import Data.List
...
putStr $ unlines $ map (unwords . map show) $ pascal n