在haskell的列表中对元素进行分组

时间:2017-09-01 14:35:36

标签: list haskell

我想从[1,26,3,94,51,6,7,8,9,10,11,12,73,29,19,90,76,87,1]

转换一个列表

[[1],[26,3],[94,51,6],[7,8,9,10],[11,12,73,29,19]]依此类推,直到haskell结束。 (我试图按子列表长度的递增顺序对元素进行分组)

我是哈斯克尔的新手,请帮帮我

1 个答案:

答案 0 :(得分:1)

您可以创建自己的递归函数来接收列表并返回列表列表,首先我们需要take列表中的元素,因为我们称之为take n xs,之后我们需要为了这个元素,我们需要调用mySplit n+1并删除我们合并到列表中的元素,因此我们只需要call drop n xs drop

mySplit :: Int -> [a] -> [[a]]
mySplit n [] = []
mySplit n xs = (take n xs):(mySplit (n + 1) (drop n xs))

ghci> mySplit 1 [1,26,3,94,51,6,7,8,9,10,11,12,73,29,19,90,76,87,1]
[[1],[26,3],[94,51,6],[7,8,9,10],[11,12,73,29,19],[90,76,87,1]]