Как в Haskell можно преобразовать список из x чисел в n списков из n чисел?
Первый подсписок будет иметь номера с первого по десятый, второй список с 11 по 20...
myFunction :: [Int] -> [[Int]]
Как в Haskell можно преобразовать список из x чисел в n списков из n чисел?
Первый подсписок будет иметь номера с первого по десятый, второй список с 11 по 20...
myFunction :: [Int] -> [[Int]]
В Data.List.Split
есть функция chunksOf
. :
chunksOf 2 [0, 1, 2, 3] -- [[0, 1], [2, 3]]
В качестве альтернативы у нас уже есть splitAt
в prelude
, с помощью которого можно легко реализовать chunksOf
:
chunksOf :: Int -> [a] -> [[a]]
chunksOf n [] = []
chunksOf n xs = let (as, bs) = splitAt n xs in as : chunksOf n bs
Может быть немного проще читать с помощью «бери и бросай» и не требует библиотек.
chunksOf :: Int -> [a] -> [[a]]
chunksOf _ [] = []
chunksOf n xs = take n xs : chunksOf n (drop n xs)