将字符串拆分为确定数量的部分(Haskell)

时间:2014-01-08 19:36:37

标签: string haskell split

我正在尝试在Haskell中分割几个部分的字符串

实际上,我已经成功将String拆分为[[Integer]],但我想要[[[Integer]]]

这就是我所拥有的:

parPaquets n [] = []
parPaquets n liste = (take n liste):parPaquets n (drop n liste)

我想要的是:parPaquets :: Int - > [整数] - > [[[整数]]]

当我执行我的功能时,这就是我所拥有的:

parPaquets 3 [1..10]
[[1,2,3],[4,5,6],[7,8,9],[10]]

我希望parPaquets 3 [1..10]得到什么:

[[[1,2,3]],[[4,5,6]],[[7,8,9]],[[10,0,0]]]

提前谢谢你:)

2 个答案:

答案 0 :(得分:3)

您可以使用map (\x -> [x])在事后修复它,或者您可以修改您的功能以便随时将内容放入列表中:

parPaquets n liste = [take n liste]:parPaquets n (drop n liste)

顺便说一句,您现有的功能也可以在split包中以几个不同的名称使用,例如chunksOf。所以你也可以写

parPaquets n = map (\x -> [x]) . chunksOf n

答案 1 :(得分:0)

我终于找到了我的问题的答案^^ 这是我的解决方案。我确定这不是一些“漂亮”的代码,但它正在工作,所以我会接受它。

parPaquets :: Int -> [Integer] -> [[[Integer]]]
parPaquets n [] = []
parPaquets n liste = if ((toInteger(length(liste)) %% (toInteger n)) == (0 %% toInteger n)) then [take n liste]:parPaquets n (drop n liste) else parPaquets n (liste ++ [0])