haskell - 计算 n 元笛卡尔积

标签 haskell combinatorics cartesian-product

给定两个列表,我可以生成这两个列表的笛卡尔积的所有排列列表:

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] ]

如何扩展 permute 以便它不采用两个列表,而是采用一个列表列表(长度 n)并返回一个列表列表(长度 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

我在 Hoogle 上找不到任何相关内容。与签名匹配的唯一函数是 transpose ,这不会产生所需的输出。

编辑:我认为它的 2 列表版本本质上是 Cartesian Product ,但我无法实现 n-ary Cartesian Product .任何指针?

最佳答案

Prelude> sequence [[1,2],[3,4],[5,6]]
[[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]

关于haskell - 计算 n 元笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3387359/

相关文章:

algorithm - 为什么 Haskell Maps 实现为平衡二叉树而不是传统的哈希表?

haskell - 两个非仿函数可以组成一个仿函数吗?

python - 加权元素的笛卡尔积

c# - 计算二项式系数的算法

Scala-yield 可以在 for 循环中多次使用吗?

java - 迭代计算任意数量集合的笛卡尔积

list - Haskell isMember 函数错误

string - 如何在 Haskell 中分割字符串?

java - 组合检查句子中所有实体的关系

r - 在给定的长度上,所有可能的十进制数字(百分数)的总和为1