Я хочу написать функцию, которая принимает список в качестве входного значения и манипулирует им следующим образом:
Шаг 1. Поместите каждые 3 элемента списка в подсписок.Если осталось менее 3 элементов, остальные элементы объединяются в конкретный подсписок, который не будет релевантным на шаге 2.
Шаг 2: Обратный порядок элементов в созданных подсписках.Первый элемент должен быть размещен в позиции третьего элемента, второй - в позиции первого элемента, а третий элемент - в позиции второго элемента.([1,2,3] преобразовано в [2,3,1])
Пример:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
-- should be transformed to
[[2,3,1],[5,6,4],[8,9,7],[11,12,10],[14,15,13],[16,17]]
До сих пор я нашел следующий подход для объединения каждых 3 элементов в подспискино я не совсем уверен, как изменить порядок элементов в каждом подсписке, чтобы он соответствовал требованиям.
splitEvery :: Int -> [a] -> [[a]]
splitEvery _ [] = []
splitEvery n xs = as : splitEvery n bs
where (as,bs) = splitAt n xs