cartésienne n-aire Étant donné deux listes, je peux produire
une liste de toutes les permutations
le produit cartésien de ces deux listes:Calculer produit
permute :: [a] -> [a] -> [[a]]
permute xs ys = [ [x, y] | x <- xs, y <- ys ]
Example> permute [1,2] [3,4] == [ [1,3], [1,4], [2,3], [2,4] ]
Comment puis-je prolonger permute de sorte qu'au lieu de prendre deux listes , il faut une liste (longueur n) des listes et retourne une liste de listes (longueur n)
permute :: [[a]] -> [[a]]
Example> permute [ [1,2], [3,4], [5,6] ]
== [ [1,3,5], [1,3,6], [1,4,5], [1,4,6] ] --etc
Je ne pouvais pas trouver quoi que ce soit pertinent sur Hoogle .. la seule fonction ne correspond à la signature était transpose
, qui doesn ne produira pas la sortie désirée.
Éditer: Je pense que la version à 2 listes de ceci est essentiellement le Cartesian Product, mais je ne peux pas enrouler ma tête autour de la mise en œuvre du n-ary Cartesian Product. Des pointeurs?
Bien que la séquence ne résout pro Blem, j'étais vraiment intéressé par la façon dont cela fonctionnerait. La [implémentation] (http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/src/Control-Monad.html#sequence) utilise des monades; existe-t-il un moyen de calculer le produit sans utiliser de monades? (par exemple dans une langue qui n'inclut pas les monades) – guhou
@ BleuM937: Pour la liste monad, 'sequence' signifie" pour chaque élément de la première liste, ajoutez-le à chaque liste obtenue en séquençant les listes restantes ". C'est fondamentalement la façon la plus évidente d'écrire un produit cartésien en utilisant un bon pli. –