我正在尝试在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]]]
提前谢谢你:)
答案 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])