【发布时间】:2020-06-26 09:14:56
【问题描述】:
我正在尝试设置一些功能来帮助我正在进行的当前项目。我是 Haskell 的新手,正在努力实现我想要的功能。
我有一个列表[a],并希望它输出四个不同列表([b],[b],[b],[b]) 的元组,其中列表[a] 中的每个项目依次放入输出元组中的下一个列表。所以输入列表[a]中的第一个元素进入第一个列表[b],[a]中的第二个元素进入第二个列表[b],[a]中的第三个元素进入第三个列表@987654334 @, 等等。
我曾尝试使用 chunksOf 和 splitEvery/splitAt 但无法获得正确的输出。帮助将不胜感激!谢谢!
【问题讨论】:
-
我认为输出是
[a] -> ([a], [a], [a], [a])?所以使用[a]s 作为输出,而不是[b]s。你能分享你的实现吗? -
是的,我正计划更改 [a] 的每个元素的数据类型,因为它被放置在 [b] 中的相应插槽中,这就是我在这种情况下更改名称的原因。但是,对于这个基本实现,我认为说 [a] 将输出是正确的,因为我仍然需要将所需的数据类型映射到 [a] 中的每个元素,因为它被传递给输出元组
-
这里问了一个类似的问题:Haskell: Splitting list into tuple of two new lists 这个问题是关于二元组(我猜是二元组;)),但是一些答案(dave4220 和 Yitz)可以很容易地扩展到您的情况。
-
@MikaelF 感谢您的链接。 this answer 以及
foldr (\a ~(x,y) -> (a:y,x)) ([],[])代码 sn-p(这也是 here 并且可能更早知道)。将其扩展到 3 元组或 n 元组...交换是旋转的,唯一需要决定的是,朝哪个方向? :) -
(我发现我的 this old answer 正在处理这个问题,尽管在 Scheme 中。)还有 this question。