您好我需要在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]]]
有没有办法做到这一点?
答案 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
。