Я хочу сделать все возможные комбинации подгрупп с 2 списками. Вот функция, которая делает именно это:
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
[[a,b]]
Если вы передадите «abc» этой функции, она вернет следующее:
["aa","ab","ac","ba","bb","bc","ca","cb","cc"]
Простая модификация того же метода может вернуть комбинации из 3 списков вместо двух.
getCombinations :: [a] -> [[a]]
getCombinations na = do
a <- na
b <- na
c <- na
[[a,b,c]]
Результат передачи "abc" в качестве аргумента:
["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"]
Какой самый простой способ сделать так, чтобы оно масштабировалось до произвольного числа списков? Вот как должно выглядеть объявление типа:
getCombinations :: Int -> [a] -> [[a]]