Есть ли способ для легкого построения списка повторяющихся элементов в Haskell без вспомогательных функций? - PullRequest
3 голосов
/ 11 октября 2011

Учитывая кортеж типа (Int, a), такой как (n,c), я хочу построить список [a], в котором элемент c повторяется n раз, то есть (4, 'b') становится "bbbb".Мое текущее решение состоит в следующем:

decode :: (Int, a) -> [a]
decode (n, a) = map (\x -> a) [1..n]

Как вы можете видеть, я отображаю анонимную функцию, которая всегда возвращает a по списку n элементов, первых n положительных целых чисел.Есть ли более эффективный способ сделать это?Я чувствую себя плохо из-за создания списка целых чисел и никогда не использую его.Другое решение будет использовать вспомогательную функцию и возвращать n, но это кажется грязным и слишком сложным.Возможно, есть что-то похожее на следующий код Python?

'b'*4

Ответы [ 3 ]

8 голосов
/ 11 октября 2011

uncurry replicate

Prelude> :t uncurry replicate
uncurry replicate :: (Int, b) -> [b]
Prelude> uncurry replicate (4, 'b')
"bbbb"
7 голосов
/ 11 октября 2011

Для этого есть встроенная копия .

Проверьте Google , когда вам нужно найти, если уже есть функция, которая делает то, что вы хотите где-то.

6 голосов
/ 11 октября 2011

Вы хотите replicate.

Хороший способ найти эти вещи: http://haskell.org/hoogle/?hoogle=Int+-%3E+a+-%3E+%5Ba%5D

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