连接每三个列表

时间:2016-09-23 07:06:13

标签: list haskell

我有很多名单。我希望concat每隔三个列表相互之间。像这样

let xss = [[1,2,3],[1,2,3],[1,2,3],
           [4,5,6],[4,5,6],[4,5,6],
           [7,8,9],[7,8,9],[7,8,9]]

someFunk xss = [[1,2,3,1,2,3,1,2,3],
                [4,5,6,4,5,6,4,5,6],
                [7,8,9,7,8,9,7,8,9]]

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:11)

仅仅为了自行车的目的,我想我会写这样的东西:

import Data.List.Split
someFunk = map concat . chunksOf 3

这很简洁,我认为它也很像你的英文描述。它使用split包。

答案 1 :(得分:3)

您可以尝试这样的事情:

someFunk :: [[a]] -> [[a]]
someFunk (x:y:z:zs) = (x ++ y ++ z) : someFunk zs
someFunk (x:y:ys) = (x ++ y) : someFunk ys
someFunk (x:xs) = x : someFunk xs
someFunk _ = []

使用模式匹配,检查包含至少三个列表的列表,加入它们并在列表的其余部分递归调用它。如果列表计数不是3的精确倍数,则后续模式仍允许您在可用时连接下3个。

Demo