在 Haskell 中将三个列表转换为一个列表

Converting three lists into one list in Haskell

我是 haskell 的新手,正在开发一个名为 combineAll 的函数。

它的输入是三个整数列表,它的输出是一个整数列表。

它将return三个列表按相应顺序相加

例如,如果输入值为:

[[1,0,0,0],[1,1,1,0],[1,1,0,0]]

则输出值为:

[3,2,1,0]

我将其签名定义为:

combineAll :: [[Int]] -> [Int]

我试过zipWith (+)但是因为它需要两个输入,我似乎不可能建立递归。

如有任何帮助,我们将不胜感激!

如果您只想将 3 个列表压缩在一起,请查看 zipWith3

或者,更通用的解决方案是通过一次将两个 int 列表压缩在一起来折叠 列表。

这似乎是一项家庭作业,而且您还没有显示代码,所以我不会提供带有代码的完整解决方案,但总的来说:

您可以 map head 遍历列表列表。如果你对 [[1,0,0,0],[1,1,1,0],[1,1,0,0]] 这样做,你会得到 [1, 1, 1]。您可以将这些相加得到 3.

如果你 map tail 穿过 [[1,0,0,0],[1,1,1,0],[1,1,0,0]],你会得到 [[0,0,0],[1,1,0],[1,0,0]]。如果你递归地应用这个,你可以在你的列表列表中得到列表的相应元素的总和。

另一种选择是使用transpose 函数。您的输入将产生:

ghci> transpose [[1,0,0,0],[1,1,1,0],[1,1,0,0]]
[[1,1,1],[0,1,1],[0,1,0],[0,0,0]]

您可以使用 transpose 解决此问题,并使用 map 转换结果列表。

映射函数将为.....

要了解它是什么,请查看每个元素的类型,以及我们有兴趣为它们产生的价值是什么。