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*))