Haskell - 2D список целых чисел - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу преобразовать 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

В основном необходимо иметь возможность распечатывать в форме сетки и поддерживать форматирование для учета максимального значения.

Я знаю, для простых списков я могу показать карту [1,2,3,4] -> ["1","2","3","4"] в соответствии с ghci.Это, кажется, сохраняет его в виде списка?

Не уверен, как я могу пройти 2D и продолжить объединение в виде строки и добавление \n по мере необходимости.

1 Ответ

1 голос
/ 16 апреля 2019

Игра на 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 может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...