<div dir="ltr">Hey Jacek, <div><br></div><div>Thanks very much for this. I took a look around, and ended up using the <b><i>chop</i></b> function from that package. So there looks to be a lot of goodies in that package.</div><div><br></div><div><br></div><div>Cheers</div><div class="gmail_extra"><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 Sun, Jul 26, 2015 at 2:01 PM, Jacek Dudek <span dir="ltr"><<a href="mailto:jzdudek@gmail.com" target="_blank">jzdudek@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><font color="#cccccc">Hi Timothy,<br>
<br>
You might want to check out the split package.<br>
Here's the link: <a href="http://hackage.haskell.org/package/split" rel="noreferrer" target="_blank">http://hackage.haskell.org/package/split</a><br>
<span class=""><br>
On 7/25/15, Timothy Washington <<a href="mailto:twashing@gmail.com">twashing@gmail.com</a>> wrote:<br>
> While I can say A), what I really need is B)<br>
><br>
</span>> *A)* > *take 5 $ chunksOf 10 [0..]*<br>
<span class="">> [[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]]<br>
><br>
</span>> *B)* > take 5 $ someFn 10 1 [0..]<br>
<span class="">> [[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]]<br>
><br>
><br>
> The music theory package indeed has a working partition function (source<br>
</span>> here <<a href="http://rd.slavepianos.org/sw/hmt/Music/Theory/List.hs" rel="noreferrer" target="_blank">http://rd.slavepianos.org/sw/hmt/Music/Theory/List.hs</a>>). The<br>
> implementation simply *i)* takes `n` from the source list, *ii)* drops by<br>
<span class="">> `m` then recurses.<br>
><br>
> segments :: Int -> Int -> [a] -> [[a]]<br>
> segments n m p =<br>
>     let q = take n p<br>
>         p' = drop m p<br>
>     in if length q /= n then [] else q : segments n m p'<br>
><br>
><br>
><br>
</span>> But that's rather manual. So I played around with this using *chop*, and<br>
> came up with the *divvy* function. It does exactly what I need.<br>
<span class="">><br>
> divvy :: Int -> Int -> [a] -> [[a]]<br>
> divvy n m lst =<br>
>   chop (\xs -> (take n xs , drop m xs)) lst<br>
><br>
><br>
</span>>> *take 5 $ partitionClojure 10 1 [0..]*<br>
</font><div class="HOEnZb"><div class="h5"><font color="#cccccc">> [[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]]<br>
><br>
><br>
> Thanks guys. This helped a lot :)<br>
><br>
><br>
> Tim<br>
><br>
><br>
> On Sat, Jul 25, 2015 at 10:56 AM, Dan Serban <<a href="mailto:dserban01@gmail.com">dserban01@gmail.com</a>> wrote:<br>
><br>
>> 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]]</font></div></div></blockquote></div></div></div>