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.

Другие вопросы по тегам