Haskell-二维整数列表

时间:2019-04-16 13:48:47

标签: string list haskell int

我想将2D列表转换为格式化的字符串。

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

1 个答案:

答案 0 :(得分:1)

在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可以提供帮助。