SplitAt 3然后继续分裂

时间:2013-10-24 14:01:48

标签: string haskell split

我希望每隔3个字母在Haskell中拆分一个字符串。

我尝试使用splitAt,但我必须重复此操作,直到字符串每3个字母分开。

有办法做到这一点吗?

E.g

"WEAREDISCOVERED"将成为["WEA","RED","ISC","OVE","RED"]

2 个答案:

答案 0 :(得分:6)

everyThree :: [a] -> [[a]]
everyThree [] = []
everyThree xs = begin : everyThree remain
   where (begin, remain) = splitAt 3 xs

所以这适用于任何类型的列表,包括字符串。因此,如果列表为空,我们只返回一个空列表。否则我们splitAt 3。幸运的是,splitAt很聪明,如果剩余的列表太短,将只返回一个,两个或没有。然后我们将该开头字符串附加到剩余的everyThree列表的头部。

答案 1 :(得分:4)

import Data.List.Split (chunksOf)

everyThree :: [a] -> [[a]]
everyThree = chunksOf 3

现在Data.List.Split是Haskell平台的一部分。