SplitAt 3, а затем продолжать расщепление
Я хочу разбить строку в Haskell каждые 3 буквы.
Я пытался использовать splitAt
но я должен был бы повторять это, пока строка не будет разделена каждые 3 буквы.
Есть ли способ сделать это?
Например
"WEAREDISCOVERED"
станет ["WEA","RED","ISC","OVE","RED"]
2 ответа
Решение
everyThree :: [a] -> [[a]]
everyThree [] = []
everyThree xs = begin : everyThree remain
where (begin, remain) = splitAt 3 xs
Так что это будет работать для любого типа списка, включая строки. Поэтому, если список пуст, мы просто возвращаем пустой список. В противном случае мы splitAt 3
, К счастью, splitAt
является умным и возвращает только один, два или ни одного, если оставшийся список слишком короткий. Затем мы добавляем эту начальную строку к голове оставшихся everyThree
список.
import Data.List.Split (chunksOf)
everyThree :: [a] -> [[a]]
everyThree = chunksOf 3
В настоящее время Data.List.Split является частью платформы Haskell.