【发布时间】:2020-02-01 21:27:30
【问题描述】:
在 Haskell 中,我正在寻找一个输入 [[a]] -> [[a]] 的函数,它在给定参数 [[1], [1,2], [1,2,3]] 的情况下生成一个列表,例如 [[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2], [1,2,3]]。鉴于每个元素都可以采用某些特定值,该函数应该生成所有可能列表的列表。所以对于上面的例子,在所有可能的列表中,第一个元素可以取[1] 中的任何值,第二个可以取[1,2] 中的任何值,第三个可以取[1,2,3] 中的任何值。每个列表的大小应与作为参数传入的列表中的列表数量相同(在上述情况下为 3,因为[[1], [1,2], [1,2,3]] 中有三个列表)。
为了实现这一点,我查看了replicateM 函数,但这假设每个元素可以采用相同数量的值。是否有一个函数可以指定不同的元素可以采用不同的值?如果没有,实现这个功能的功能是什么样的?
【问题讨论】:
-
这个函数被称为列表的笛卡尔积。
-
\i -> replicateM i==\i -> sequence . replicate i.
标签: list haskell functional-programming