"Повторить" в Haskell?
Я очень новичок в Haskell, и у меня есть простой вопрос.
Какую функцию я могу использовать с a и b, которая приведет к a, b раз.
Пример:
a = 4 | b = 3
Вернется:
[4, 4, 4]
Спасибо!
Ответы
Ответ 1
replicate
:
replicate 3 4
будет:
[4,4,4]
Когда вы знаете, какой тип функции вам нужен (в этом случае было совершенно очевидно, что функция, в которой вы нуждались, имела тип, похожий на Int -> a -> [a]
), вы можете использовать Hoogle, чтобы найти его.
Ответ 2
Вы также можете использовать рекурсию (хотя, конечно, предпочтительные решения должны быть предпочтительнее):
rep a 0 = []
rep a b = a : rep a (b-1)
Ответ 3
Конечно, правильно, вы должны использовать replicate
.
Однако очень общий шаблон для таких задач состоит в том, чтобы построить бесконечный список и взять столько, сколько вам нужно (используя take
или takeWhile
):
rep a b = take b $ repeat a
Другим (более учебным, чем практическим) подходом является использование списка правильной длины и отображение всех элементов в a:
rep a b = map (const a) [1..b]
Очень неэффективная, но интересная версия
rep a b = until ((b==).length) (a:) []
Ответ 4
.. или просто что-то подобное
> take 3 [4,4..]
> [4,4,4]