将字符串分组为特定大小的子字符串列表

时间:2018-02-22 21:21:34

标签: string list haskell grouping

我已经拿起了一本Haskell书并且正在编写函数,我正在尝试编写一个函数,该函数接受一个字符串,然后创建一个子字符串列表,并可以选择每个子字符串中需要多少个字母。

我刚开始使用Haskell,所以不确定从哪里开始。

我尝试过使用群组功能,但整个概念对我来说非常困惑。还有另一个叫做break的函数,它显然会中断,但只会创建一个由两个列表组成的元组,这两个列表来自条件边界分隔的原始列表

2 个答案:

答案 0 :(得分:0)

问题有点模糊但听起来你想要的是一个函数,它接受一个int和一个字符串,然后返回一个字符串列表int的长度。

首先确定你的功能类型。

Int -> String -> [String]

Prelude有一个名为splitAt的函数,它将获取一个int并将列表分成一对。例如

splitAt 3 "123456789" = ("123", "456789")

您可以使用此recursivley创建所需的功能。

foo :: Int -> String -> [String]
foo i ""  = []
foo i str = let (x, y) = splitAt i str
            in x : foo i y

foo 3 "123456789" = ["123", "456", "789"]

请注意,splitAt适用于任何列表,字符串只是一个字符列表。

因此,您可以编写一个更通用的功能,可以使用您提供的任何列表。

goo :: Int -> [a] -> [[a]]
goo i []  = []
goo i xs = let (x, y) = splitAt i xs
            in x : goo i y 

答案 1 :(得分:0)

我意识到你正在寻找自己写这个功能。仅供参考,Haskell在名为Data.List.Split的{​​{1}}包中有一个内置函数(请参阅文档here)。让我们转向GHCI repl在实践中看到它:

chunksOf