2

Haskell で 3 文字ごとに文字列を分割したい。

使用してみ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はスマートで、残りのリストが短すぎる場合は、1 つ、2 つ、または 1 つも返されません。次に、その開始文字列を残りのリストの先頭に追加しますeveryThree

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

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

現在、Data.List.Split は Haskell Platform の一部です。

于 2013-10-24T16:14:08.353 に答える