リストを指定した個数ずつに分割する

どっかで見たような気もするんですが、思い出せなかったので実装してみました。うーむ、高階関数を上手く使えそうな気もするんですが、いいのが思い付かなかったので普通に再帰で実装してみました。

module Main (main) where

groupn :: Int -> [a] -> [[a]]
groupn _ [] = []
groupn n xs =
  let (xs1, xs2) = splitAt n xs
  in xs1 : groupn n xs2

main :: IO ()
main = print $ groupn 4 [1 .. 10] -- => [[1,2,3,4],[5,6,7,8],[9,10]]