#haskell #functional-programming
#haskell #функциональное программирование
Вопрос:
например: 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
но даже не компилируется.
Комментарии:
1. Какую ошибку компиляции это выдает?
2. Как вы думаете,
replicate length x x
что делать? И почему вы так думаете?3. Ваш расчет максимальной длины неверен (попробуйте
["aa", "b"]
указать1
вместо2
).4. я пытаюсь еще раз, свяжусь, как только я это сделал @talex
5. @talex спасибо за ваш вклад!, я поделился своим решением
Ответ №1:
вот решение с вспомогательной функцией от @talex
longest :: [String] -> Int
longest m = maximum $ map length m
makeSame :: [String] -> [String]
makeSame m = map ( x -> x replicate (longest m- length x) '*') m
Ответ №2:
Чтобы получить максимальную длину, вы можете:
maxLength list = maximum $ map length list
для дублирования символов используйте replicate
( replicate 3 '*'
приведенный "***"
пример).
Все, что вам нужно сделать, это объединить эти два метода.
Чтобы определить количество пропущенных символов, вам нужно вычесть длину строки ( length "somestring"
указать ее вам) из максимальной длины.
Комментарии:
1. чтобы получить максимальное количество элементов списка, я тоже это сделал, но проблема в том, как определить количество пропущенных символов, а затем добавить его
2. @mWelt Я расширил свой ответ.