haskell - 如何压缩不同长度的列表?

标签 haskell

如何压缩两个列表,例如

["Line1","Line2","Line3"]
["Line4","Line5"]

不丢弃第一个列表中的其余元素?

如果可以的话,我想用空列表压缩额外的元素。

最佳答案

zipWithPadding :: a -> b -> [a] -> [b] -> [(a,b)]
zipWithPadding a b (x:xs) (y:ys) = (x,y) : zipWithPadding a b xs ys
zipWithPadding a _ []     ys     = zip (repeat a) ys
zipWithPadding _ b xs     []     = zip xs (repeat b)

只要有元素,我们就可以简单地对它们进行压缩。一旦我们用完元素,我们只需使用填充元素的无限列表来压缩剩余列表。

在您的情况下,您可以将其用作

zipWithPadding "" "" ["Line1","Line2","Line3"] ["Line4","Line5"]
-- result: [("Line1","Line4"),("Line2","Line5"),("Line3","")]

关于haskell - 如何压缩不同长度的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22403029/

相关文章:

haskell - 为什么我必须调用 `sum` 两次来对 `Maybe Integer` 的列表求和?

haskell - Haskell 中的循环列表和无限列表有什么区别?

haskell - 测试 Haskell 变量是否匹配用户定义的数据类型选项

haskell - If 语句使用 IO Int haskell

haskell - 我使用的是 react 香蕉吗?

Haskell:检查 IO 的长度 [Double]

HaskellDB - 'Database' 变量不在范围内

c++ - GHCi 无法在 Windows 上加载 .dll 库(C++ 库)

haskell - cabal repl 太慢了

linux - 在 Linux 上缺少使用 Cabal 构建 Haskell 包的 native 库