Re: Given any list, group n number of sublists into a single list
George Neuner <[email protected]>
| Newsgroups | gmane.comp.lang.racket.user,gmane.lisp.scheme.plt |
|---|---|
| Message-ID | <[email protected]> |
Doing people's homework are we? On 5/17/2017 8:08 PM, Matthew Butterick wrote: > `slice-at` > > http://docs.racket-lang.org/sugar/index.html?q=slice-at#%28def._%28%28lib._sugar%2Flist..rkt%29._slice-at%29%29 > <http://docs.racket-lang.org/sugar/index.html?q=slice-at#%28def._%28%28lib._sugar/list..rkt%29._slice-at%29%29> > >> On May 17, 2017, at 3:56 PM, Don Green <[email protected] >> <mailto:[email protected]>> wrote: >> >> Racket code that could perform this list manipulation? >> (every-n-lists-into-list <n-lists-to-group> '(<in-list>)) >> (every-n-lists-into-list 1 '((1) (2))) ;=> '(((1) (2))) >> (every-n-lists-into-list 2 '((1) (2) (3) (4))) ;=> '(((1) (2)) ((3) (4))) >> (every-n-lists-into-list 3 '((1) (2) (3) (4)) (5) (6))) ;=> '(((1) >> (2) (3)) ((4) (5) (6))) > Very nice! Unfortunately, the existence of sugar was unknown to me until just now. More evidence that one can spend a lifetime learning what batteries Racket already has included. My 1st thought was to use split-at: #lang racket (define (group-items n items) ;; check # of items (unless (= 0 (modulo (length items) n)) (error "not enough items")) ;; split and reassemble (let loop [ (items items) (result '()) ] (if [null? items] (reverse result) (let-values [((head tail)(split-at items n))] (loop tail (cons head result))) )) ) George -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] For more options, visit https://groups.google.com/d/optout.