Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: Haskell equivalent to Clojure's partition fn (Jacek Dudek) ---------------------------------------------------------------------- Message: 1 Date: Sun, 26 Jul 2015 17:01:51 -0400 From: Jacek Dudek <jzdu...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Haskell equivalent to Clojure's partition fn Message-ID: <cajxg2_fcsefjq9pxro0ws7b_e6ietlywhvmytmtkjjrvxgg...@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 Hi Timothy, You might want to check out the split package. Here's the link: http://hackage.haskell.org/package/split On 7/25/15, Timothy Washington <twash...@gmail.com> wrote: > 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 <http://rd.slavepianos.org/sw/hmt/Music/Theory/List.hs>). 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 <dserba...@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 >> > ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 85, Issue 19 *****************************************