Haskell:按索引列表拆分列表

拉恩·沃登

我是函数编程和学习Haskell的新手。我有一个索引列表和一个想要根据索引列表(按升序排列)拆分的元素列表。

splitByIndices :: [a] -> [Int] -> [[a]]

我想到的take indexlist[n]drop indexlist[n-1],但不知道如何与实现它foldl请帮忙!谢谢!

例:

splitByIndices [1,2,3,4,5] [1,2] = [1],[2],[3,4,5]
安德拉斯·科瓦奇斯(AndrásKovács)
splitByIndices :: [a] -> [Int] -> [[a]]
splitByIndices xs is = go xs (zipWith subtract (0:is) is) where
    go [] _      = []
    go xs (i:is) = let (a, b) = splitAt i xs in a : go b is
    go xs _      = [xs]

当索引没有严格增加时,这当然会产生错误的结果。您可以通过以下方式强制执行此条件:

import Data.List

enforce :: [Int] -> [Int]
enforce = map head . group . sort

然后您可以使用enforce is代替is

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章