打印haskell中的2D列表

时间:2014-10-24 10:53:17

标签: haskell

如果我有列表列表,并且我想创建它们的表,那么它们都是对齐的,并且所有列都相同。我开始但不知道如何继续..

table xxs
    | length (nub [length xs | xs <- xxs])/=1 = error "not simetric"
    | otherwise = (mapM_ print) [ xs | xs <- xxs]

bignumber xxs = maximum [length (show (maximum xs))| xs<-xxs]

示例:

table [[1,2,456],[34,2,34]-->

  1   1 456
 34   2  34

2 个答案:

答案 0 :(得分:1)

您可以使用printf进行漂亮打印,然后使用transpose来计算maxlen

import Text.Printf
import Data.List (transpose)

table = undefined

showtable xxs = mapM_ (showrow. zip maxlens) xxs
  where
    maxlens = map (show . (+ 1)) $ foldr (max.length.show) 0 $ transpose xxs
    showcell (maxl,c) = printf ("%" ++ ml ++ "s") $ show c
    showrow xs = mapM_ showcell xs >> putStrLn "" 

答案 1 :(得分:0)

怎么样:

import Data.List

print_ x =  putStr $ (show x) ++ "\t" 

table xxs 
    | length (nub [length xs | xs <- xxs])/=1 = error "not simetric"
    | otherwise = mapM_ printRow xxs 
        where printRow xs =  (mapM_ print_) xs >> putStrLn "" 

<强>演示:

table [[1,2,456],[34,2,34]]
1   2   456  
34  2   34