<div dir="ltr">While I can say A), what I really need is B)<div><br></div><div><div><b>A)</b> > <b><i>take 5 $ chunksOf 10 [0..]</i></b></div><div>[[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]]</div></div><div><br></div><div><b>B)</b> > take 5 $ someFn 10 1 [0..]</div><div>[[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]]</div><div><br></div><div><br></div><div>The music theory package indeed has a working partition function (<a href="http://rd.slavepianos.org/sw/hmt/Music/Theory/List.hs">source here</a>). The implementation simply <b><i>i)</i></b> takes `n` from the source list, <b><i>ii)</i></b> drops by `m` then recurses.</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div>segments :: Int -> Int -> [a] -> [[a]]</div></div><div><div>segments n m p =</div></div><div><div>    let q = take n p</div></div><div><div>        p' = drop m p</div></div><div><div>    in if length q /= n then [] else q : segments n m p'</div></div></blockquote><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">But that's rather manual. So I played around with this using <b><i>chop</i></b>, and came up with the <b><i>divvy</i></b> function. It does exactly what I need. </div><div class="gmail_extra"><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_extra">divvy :: Int -> Int -> [a] -> [[a]]</div></div><div class="gmail_extra"><div class="gmail_extra">divvy n m lst =</div></div><div class="gmail_extra"><div class="gmail_extra">  chop (\xs -> (take n xs , drop m xs)) lst</div></div></blockquote><div class="gmail_extra"><div class="gmail_extra"><br></div></div><div class="gmail_extra"><div class="gmail_extra">> <b><i>take 5 $ partitionClojure 10 1 [0..]</i></b></div><div class="gmail_extra">[[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]]</div><div class="gmail_extra"><br></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Thanks guys. This helped a lot :)</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="font-family:arial;font-size:small">Tim </div></div></div></div></div></div>
<div class="gmail_extra"><br></div><br><div class="gmail_quote">On Sat, Jul 25, 2015 at 10:56 AM, Dan Serban <span dir="ltr"><<a href="mailto:dserban01@gmail.com" target="_blank">dserban01@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It looks like chunksOf will take you most of the way there. Here's my<br>
quick and dirty GHCi session output:<br>
<br>
λ> import Data.List.Split<br>
λ><br>
λ> let clojurePartition n m = map (take n) $ chunksOf (n+m) [0..]<br>
λ><br>
λ> take 3 $ clojurePartition 4 6<br>
[[0,1,2,3],[10,11,12,13],[20,21,22,23]]<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div></div>