Racket 球拍,将一张球拍分成一定数量的球拍

Racket 球拍,将一张球拍分成一定数量的球拍,racket,Racket,我想编写一个程序,给定一个列表和一个数字,将列表拆分为给定数量的列表 比如说, (split 3 '(1 2 3 4 5 6 7 8 9 10)) 应列出三个列表(例如,因为列表是随机完成的): 它应该随机选取元素,这样创建的列表总是不同的 一旦我有了代码,我会把它和我得到的这个进行比较。(我正在学球拍)到目前为止你都试了些什么?非常感谢布伦丹!这正是我想要的,它真的帮助了我。谢谢你! ‘(4 1 6) ‘(9 7 2) ‘(3 10 8 5) (define (n-way-split

我想编写一个程序,给定一个列表和一个数字,将列表拆分为给定数量的列表

比如说,

(split 3 '(1 2 3 4 5 6 7 8 9 10))
应列出三个列表(例如,因为列表是随机完成的):

它应该随机选取元素,这样创建的列表总是不同的


一旦我有了代码,我会把它和我得到的这个进行比较。(我正在学球拍)

到目前为止你都试了些什么?非常感谢布伦丹!这正是我想要的,它真的帮助了我。谢谢你!
‘(4 1 6)

‘(9 7 2)

‘(3 10 8 5)
(define (n-way-split n lst)
  (define (go len* lst)
    (match len*
      ['() '()]
      [`(,len . ,len*-tail)
       (let-values ([(next-len-elems rest-of-elems) (split-at lst len)])
         (cons next-len-elems (go len*-tail rest-of-elems)))]))
  (go (n-way-split-length* n (length lst))
      (shuffle lst)))

(define (n-way-split-length* n len)
  (let*-values ([(quot rem)                     (quotient/remainder len n)]
                [(count/lists-of-length-quot)   (- n rem)]
                [(count/lists-of-length-quot+1) rem]
                [(size*) (append (make-list count/lists-of-length-quot   quot)
                                 (make-list count/lists-of-length-quot+1 (+ 1 quot)))])
    size*))