我已经拿起了一本Haskell书并且正在编写函数,我正在尝试编写一个函数,该函数接受一个字符串,然后创建一个子字符串列表,并可以选择每个子字符串中需要多少个字母。
我刚开始使用Haskell,所以不确定从哪里开始。
我尝试过使用群组功能,但整个概念对我来说非常困惑。还有另一个叫做break的函数,它显然会中断,但只会创建一个由两个列表组成的元组,这两个列表来自条件边界分隔的原始列表
答案 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