2

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

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

有没有办法做到这一点?

例如

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

4

2 回答 2

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

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

于 2013-10-24T14:09:10.163 回答
4
import Data.List.Split (chunksOf)

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

如今 Data.List.Split 是 Haskell 平台的一部分。

于 2013-10-24T16:14:08.353 回答