2013-03-07 5 views
0

Comment puis-je obtenir une liste de combinaisons à partir d'une liste de listes?Liste des combinaisons d'une liste de valeurs?

Par exemple:

ghci> getCombinations [[1,2,3],[10,20,30],[100,200,300]] 

[[1,10,100],[1,10,200],[1,10,300],[1,20,100],[1,20,200],[1,20,300],[1,30,100], 
[1,30,200],[1,30,300],[2,10,100],[2,10,200],[2,10,300],[2,20,100],[2,20,200], 
[2,20,300],[2,30,100],[2,30,200],[2,30,300],[3,10,100],[3,10,200],[3,10,300], 
[3,20,100],[3,20,200],[3,20,300],[3,30,100],[3,30,200],[3,30,300]] 
+0

duplication possible de [Calculer le produit cartésien n-aire] (http: // stackoverflow .com/questions/3387359/calcul-n-ary-cartesian-produit) –

Répondre

2
import Control.Applicative 

getCombinations :: [[a]] -> [[a]] 
getCombinations values = 
foldl (\acc values -> (\list value -> list ++ [value]) <$> acc <*> values) [[]] values 

getCombinations [[1,2,3],[10,20,30],[100,200,300]] 

[[1,10,100], [1,10,200], [1,10,300], [1,20,100], [1,20,200], [1 , 20 300], [1,30,100], [1,30,200], [1,30,300], [2,10,100], [2,10,200], [2,10,300], [2,20,100], [2,20,200 ], [2,20,300], [2,30,100], [2,30,200], [2,30,300], [3,10,100], [3,10,200], [3,10,300], [3,20,100], [3,20,200], [3,20,300], [3,30,100], [3,30,200], [3,30,200]]

+6

La sim La version de pler, sans la nécessité d'un 'import', est' sequence'. –

+0

LOL! Vous avez raison: séquence [[1,2,3], [10,20,30], [100,200,300]] –

Questions connexes