haskell - Haskell 中的列表连接

标签 haskell pointfree

我想要一个函数,它接受两个任何类型的列表并返回一个(即 f:: [[a]] -> [[a]] -> [[a]] )。基本上,也会产生两个输入列表的“串联”。

例如

> f [[1,2,3], [123]] [[4,5,6], [3,7]]
[[1,2,3,4,5,6], [1,2,3,3,7], [123,4,5,6], [123,3,7]]

我目前已经做到了这一点:
f _ [] = []
f [] _ = []
f (xs:xss) (ys:yss) = ((xs ++ ys) : [m | m <- f [xs] yss])

但这并没有考虑到xss并且是错误的。有什么建议?

最佳答案

它是笛卡尔积,因此您可以简单地使用一个列表理解来完成所有工作。

Prelude> let xs = [[1,2,3], [123]]
Prelude> let ys = [[4,5,6], [3,7]]
Prelude> [x ++ y | x <- xs, y <- ys]
[[1,2,3,4,5,6],[1,2,3,3,7],[123,4,5,6],[123,3,7]]

关于haskell - Haskell 中的列表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692690/

相关文章:

haskell - 为什么实际类型是Double?

haskell - 在函数返回类型中模拟存在量化

haskell - Lisp 能否以不可变的函数式方式轻松使用?

javascript - Pointfree 在 Ramda 中通过对象中的键将数组连接到字符串

haskell - 记录构造函数的语法

haskell - 在 Haskell 中检查 3 个列表中的公共(public)整数的最有效方法

haskell - 使函数与 'if' 无点

haskell - 无点风格并使用 $

function - Haskell - 将函数元组应用于值元组?

javascript - 以无点方式使用 Ramda map 助手