我是函数编程和学习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]
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] 删除。
我来说两句