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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.