Dadas dos listas, puedo producir
una lista de todas las permutaciones
el producto cartesiano de estas dos listas:Calcular n-arias producto cartesiano
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] ]
¿Cómo se amplía permute por lo que en lugar de tomar dos listas , se necesita una lista (longitud n) de las listas y devuelve una lista de listas (longitud 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
no pude encontrar nada relevante sobre Hoogle .. la única función que concuerden con la firma era transpose
, que doesn no produce la salida deseada
Editar: Creo que la versión de 2 listas de esto es esencialmente el Cartesian Product, pero no puedo entender la implementación del n-ary Cartesian Product. ¿Alguna sugerencia?
Mientras secuencia resuelve el pro blem, estaba realmente interesado en cómo funcionaría esto. La [implementación] (http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/src/Control-Monad.html#sequence) usa mónadas; ¿Hay alguna manera de calcular el producto sin usar mónadas? (por ejemplo, en un idioma que no incluye mónadas) – guhou
@ BleuM937: para la lista de mónadas, 'secuencia' significa" para cada elemento en la primera lista, anteponerla a cada lista obtenida secuenciando las listas restantes ". Básicamente es la forma más obvia de escribir un producto cartesiano utilizando un doblez correcto. –