Gegeben seien zwei Listen, kann ich
eine Liste aller Permutationen
die Kartesisches Produkt dieser beiden Listen erzeugen:berechnen n-ary Kartesisches Produkt
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] ]
Wie kann ich permute erweitern, so dass statt zwei Listen der Einnahme , dauert es eine Liste (Länge n) von Listen und gibt eine Liste von Listen (Länge 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
ich nichts Relevantes auf Hoogle nicht .. die einzige Funktion passend die Signatur transpose
war finden konnte, die doesn t produzieren die gewünschte Ausgabe.
Edit: Ich denke, die 2-Liste-Version von diesem ist im Wesentlichen die Cartesian Product, aber ich kann nicht meinen Kopf rund um die Implementierung der n-ary Cartesian Product. Irgendwelche Zeiger?
Während Sequenz, die die pro löst Ich war wirklich interessiert daran, wie das funktionieren würde. Die [Implementierung] (http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/src/Control-Monad.html#sequence) verwendet Monaden; Gibt es eine Möglichkeit, das Produkt ohne Monaden zu berechnen? (zB in einer Sprache, die keine Monaden enthält) – guhou
@ BleuM937: Für die Listen-Monade bedeutet 'sequence '" für jedes Element in der ersten Liste, fügen Sie es jeder Liste hinzu, die durch Sequenzierung der übrigen Listen erhalten wird ". Es ist im Grunde die naheliegendste Art, ein kartesisches Produkt mit einer rechten Falte zu schreiben. –