Haskell で 3 文字ごとに文字列を分割したい。
使用してみsplitAt
ましたが、文字列が 3 文字ごとに分割されるまでこれを繰り返す必要があります。
これを行う方法はありますか?
例えば
"WEAREDISCOVERED"
になるだろう["WEA","RED","ISC","OVE","RED"]
everyThree :: [a] -> [[a]]
everyThree [] = []
everyThree xs = begin : everyThree remain
where (begin, remain) = splitAt 3 xs
したがって、これは文字列を含むあらゆるタイプのリストで機能します。したがって、リストが空の場合は、空のリストを返します。そうでなければ私たちsplitAt 3
。幸いなことに、splitAt
はスマートで、残りのリストが短すぎる場合は、1 つ、2 つ、または 1 つも返されません。次に、その開始文字列を残りのリストの先頭に追加しますeveryThree
。
import Data.List.Split (chunksOf)
everyThree :: [a] -> [[a]]
everyThree = chunksOf 3
現在、Data.List.Split は Haskell Platform の一部です。