Я работаю над проблемой в викибуке на haskell и полностью застрял. Они просят «Обобщить пример вторжения кролика в главе с монадой списка для произвольного числа поколений».
Описание примера вторжения кролика:
«Легко включить знакомоеФункции обработки списков в монадическом коде. Рассмотрим этот пример: кролики собирают в среднем шесть комплектов в каждом помете, половина из которых будет самкой. Начиная с матери-одиночки, мы можем смоделировать количество комплектов самок в каждом последующем поколении (т.е. количество новых наборов после того, как кролики вырастут и будут иметь свои собственные пометы): "
Prelude> let generation = replicate 3
Prelude> ["bunny"] >>= generation
["bunny","bunny","bunny"]
Prelude> ["bunny"] >>= generation >>= generation
["bunny","bunny","bunny","bunny","bunny","bunny","bunny","bunny","bunny"]
Моя попытка генерирует вложенные списки вместо плоского списка
В этой главе упоминаются функции, которыеЯ предполагаю, что должен использовать в том числе: sequence, replicate, replicateM, mapM, forM и их версии подчеркивания, которые не передают контекст следующей связанной монаде.
["bunny"] >>= replicateM 2 gen
Я получаю
[["bunny","bunny","bunny"],["bunny","bunny","bunny"]]
но это должно быть
["bunny","bunny","bunny","bunny","bunny","bunny","bunny","bunny","bunny"]