在 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
转换结果列表。
映射函数将为.....
要了解它是什么,请查看每个元素的类型,以及我们有兴趣为它们产生的价值是什么。
我是 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
转换结果列表。
映射函数将为.....
要了解它是什么,请查看每个元素的类型,以及我们有兴趣为它们产生的价值是什么。