1

在 Haskell 中,如何将 x 个数字的列表更改为 n 个 n 个数字的列表?

第一个子列表将有第一到第十个数字,第二个列表从第 11 到第 20...

myFunction :: [Int] -> [[Int]]

4

2 回答 2

5

有以下chunksOf功能Data.List.Split

chunksOf 2 [0, 1, 2, 3] -- [[0, 1], [2, 3]]

或者,我们已经有了splitAtin preludechunksOf可以轻松实现:

chunksOf :: Int -> [a] -> [[a]]
chunksOf n [] = []
chunksOf n xs = let (as, bs) = splitAt n xs in as : chunksOf n bs
于 2014-06-16T20:26:27.333 回答
3

使用 take 和 drop 可能更容易阅读,并且不需要库。

chunksOf :: Int -> [a] -> [[a]]
chunksOf _ [] = []
chunksOf n xs = take n xs : chunksOf n (drop n xs)
于 2014-06-17T07:30:03.043 回答