While I can say A), what I really need is B)

A) > take 5 $ chunksOf 10 [0..]
[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13,14,15,16,17,18,19],[20,21,22,23,24,25,26,27,28,29],[30,31,32,33,34,35,36,37,38,39],[40,41,42,43,44,45,46,47,48,49]]

B) > take 5 $ someFn 10 1 [0..]
[[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11],[3,4,5,6,7,8,9,10,11,12],[4,5,6,7,8,9,10,11,12,13]]


The music theory package indeed has a working partition function (source here). The implementation simply i) takes `n` from the source list, ii) drops by `m` then recurses.

segments :: Int -> Int -> [a] -> [[a]]
segments n m p =
    let q = take n p
        p' = drop m p
    in if length q /= n then [] else q : segments n m p'


But that's rather manual. So I played around with this using chop, and came up with the divvy function. It does exactly what I need. 

divvy :: Int -> Int -> [a] -> [[a]]
divvy n m lst =
  chop (\xs -> (take n xs , drop m xs)) lst

> take 5 $ partitionClojure 10 1 [0..]
[[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11],[3,4,5,6,7,8,9,10,11,12],[4,5,6,7,8,9,10,11,12,13]]


Thanks guys. This helped a lot :)


Tim 


On Sat, Jul 25, 2015 at 10:56 AM, Dan Serban <dserban01@gmail.com> wrote:
It looks like chunksOf will take you most of the way there. Here's my
quick and dirty GHCi session output:

λ> import Data.List.Split
λ>
λ> let clojurePartition n m = map (take n) $ chunksOf (n+m) [0..]
λ>
λ> take 3 $ clojurePartition 4 6
[[0,1,2,3],[10,11,12,13],[20,21,22,23]]
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners