"Повторить" в 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]