2013-10-08 15 views
6

sto cercando di stampare Pascal triangolo fino a qualche fila arbitraria, dopo aver riflettuto mi si avvicinò con questa soluzione:Stampa elenco delle liste senza staffe

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 

che funziona abbastanza bene, tranne che per la stampa. Quando applico pascal 4 ottengo:

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

quando quello che voglio veramente è questo:

1 
1 1 
1 2 1 
1 3 3 1 

C'è un modo che io possa fare questo?

risposta

13

Definire la propria funzione pretty-printing:

import Data.List (intercalate) 

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

Grazie, questo è stato davvero utile. Marchio malato come risposta, se possibile. –

6

Si potrebbe unwords/unlines:

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