как сделать длину элементов списка такой же как самой длинной в haskell - PullRequest
0 голосов
/ 07 марта 2019

например: makeSame ["ab", "bad", "mammy"] тогда вывод ["ab***","bad**", "mammy"] за каждый пропущенный символ получите '*'

makeSame:: [String] -> [String]
makeSame m = let f = length  (last (sort m))
  in 
    (\x ->replicate length x x ++'*') m

но даже не компилируется.

Ответы [ 2 ]

3 голосов
/ 07 марта 2019

вот решение с вспомогательной функцией от @ talex

longest :: [String] -> Int
longest m = maximum $ map length m

makeSame :: [String] -> [String]
makeSame m = map (\ x -> x ++ replicate (longest m- length x) '*') m 
3 голосов
/ 07 марта 2019

Чтобы получить максимальную длину, вы можете:

maxLength list = maximum $ map length list

для дублирования символов используйте replicate (пример replicate 3 '*' дает "***").

Все, что вам нужно сделать, это объединить эти два метода.

Чтобы определить количество пропущенных символов, вам нужно вычесть длину строки (length "somestring" передайте ее вам) из максимальной длины.

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