2013-10-08 103 views
6

我试图打印杨辉三角形高达一些任意行,经过一番思考,我想出了这个解决方案:打印列表中没有括号

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 

有没有什么办法可以做到这一点?

回答

13

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

import Data.List (intercalate) 

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

谢谢你,这是真的很有帮助。如果有能力,我会将其标记为答案。 –

6

你可以unwords/unlines:

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