Haskell - 整数到字符串的二维列表

Haskell - 2D List of Ints to String

我正在寻找将二维列表转换为格式化字符串的方法。

table :: [[Int]] -> String

Input: [[11,2,30],[4,555,9]]

Output: " 11   2 30 \n  4 555   6 \n"

        11   2  30
         4 555   9

基本上需要能够以网格形状打印并保持格式以说明最大值。

我知道对于简单列表我可以根据 ghci 映射显示 [1,2,3,4] -> ["1","2","3","4"]。不过,这似乎将其保留为列表?

不确定如何遍历 2D 并保持连接为字符串并根据需要添加 \n

参加 REPL 比赛会有所帮助。

> :t '1'
'1' :: Char

> :t "1"
"1" :: [Char]

> ['1','2']
"12" :: [Char]

> :t concat
concat :: [[a]] -> [a]

> concat ( map show [1,2,3,4] )
.....

> concat [ show x | x <- [1,2,3,4] ]
.....

> concat [ " " ++ ( ensureWidth 9 (show x) ) | x <- [1,2,3,4] ]
.....

> :t replicate
replicate :: Int -> a -> [a]

> replicate 2 '1'
"11" :: [Char]

现在你需要编写函数

ensureWidth w s = replicate n ' ' ++ s

但是 n 有什么用呢?为此,您需要知道 s 的长度。函数 length 可以提供帮助。