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

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

4

2 回答 2

13

定义你自己的漂亮打印函数:

import Data.List (intercalate)

show' :: Show a => [a] -> String
show' = intercalate " " . map show
于 2013-10-08T19:14:00.183 回答
6

你可以取消/取消:

import Data.List
...
putStr $ unlines $ map (unwords . map show) $ pascal n
于 2013-10-08T19:21:05.800 回答