Quiero hacer todas las combinaciones posibles de subgrupos con 2 listas. Aquí es una función que hace precisamente esto:Permutaciones de una lista - Haskell
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
[[a,b]]
Si pasa "abc" para esta función, devuelve lo siguiente:
["aa","ab","ac","ba","bb","bc","ca","cb","cc"]
Una simple modificación del mismo método podría volver combinaciones de 3 listas en lugar de dos
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
c <- na
[[a,b,c]]
resultado de pasar "abc" como argumento:
["aaa","aab","aac","aba","abb","abc","aca","acb","acc",
"baa","bab","bac","bba","bbb","bbc","bca","bcb","bcc",
"caa","cab","cac","cba","cbb","cbc","cca","ccb","ccc"]
¿Cuál es la forma más sencilla de hacerlo escalar a un número arbitrario de las listas? Esto es lo que la declaración de tipo debe ser similar:
getCombinations :: Int -> [a] -> [[a]]
Siempre puedes intentar utilizar hoogle: http://www.haskell.org/hoogle/?hoogle=Int+-%3E+[a]+-%3E+[[a]], da replicateM como tercer resultado. – sdcvvc
Gracias sdcvvc, ¡no sabía que era posible consultar hoogle de esa manera! – RooSoft
Técnicamente, estas son [Permutaciones] (https://en.wikipedia.org/wiki/Permutation) NOT [Combinaciones] (https://en.wikipedia.org/wiki/Combination). Los matemáticos serán pedantes ... –