Функция, которая генерирует список всех возможных списков с учетом элементов, которые может занимать позиция - PullRequest
3 голосов
/ 02 февраля 2020

В Haskell Я ищу функцию с набором [[a]] -> [[a]], которая генерирует список, такой как [[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2], [1,2,3]], с учетом параметра [[1], [1,2], [1,2,3]]. Функция должна генерировать список всех возможных списков, учитывая, что каждый элемент может принимать некоторые определенные значения. Таким образом, для приведенного выше примера во всех возможных списках первый элемент может принимать любое значение в [1], второй может принимать любое значение в [1,2], а третий может принимать любое [1,2,3]. Каждый список должен иметь тот же размер, что и количество списков в списке, переданном в качестве параметра (который в вышеприведенном случае равен 3, поскольку в [[1], [1,2], [1,2,3]] есть три списка.

. Вы просматривали функцию replicateM, но это предполагает, что каждый элемент может принимать одинаковое количество значений. Есть ли функция, где вы можете указать, что разные элементы могут принимать разные значения? Если нет, то как бы выглядела эта функция?

1 Ответ

3 голосов
/ 02 февраля 2020

Эта функция

sequenceA :: (Applicative f, Traversable t) => t (f a) -> f (t a)

предназначена для списков, т.е. (f ~ [], t ~ []), что дает

sequenceA :: [[a]] -> [[a]]

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