如果我有列表列表,并且我想创建它们的表,那么它们都是对齐的,并且所有列都相同。我开始但不知道如何继续..
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
答案 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