列表中包含拆分列表haskell

时间:2014-06-06 08:46:15

标签: list haskell

您好我需要在Haskell中通过参数拆分列表。我找到了这样的功能

group :: Int -> [a] -> [[a]]
group _ [] = []
group n l
  | n > 0 = (take n l) : (group n (drop n l))
  | otherwise = error "Negative n"

但是如果我要分割的列表包含在另一个列表中呢?

例如

group 3 [[1,2,3,4,5,6],[2,4,6,8,10,12]]

应该返回

[[[1,2,3],[4,5,6]],[[2,4,6],[8,10,12]]]

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

对该列表的元素(列表)执行map

grouplists :: [[a]] -> Int -> [[[a]]]
grouplists input n = map (group n) input

答案 1 :(得分:0)

你想要这个:

group n = map (toList . splitAt n)
  where
    toList (x,y) = [x,y]

<强>更新 鉴于规范涉及重复采取和放弃这里我将如何做:

import Data.List (unfoldr)
import Data.Maybe (listToMaybe)

group :: Int -> [[a]] -> [[[a]]]
group n = map (unfoldr split)
  where
    split = (\s -> listToMaybe (fst s) >> Just s) . splitAt n

您会注意到,此处的内容也是已实施为group的内容的定义。它是unfoldr split