27 lines
621 B
Scheme
27 lines
621 B
Scheme
|
|
(module utils mzscheme
|
|
(provide shuffle-list)
|
|
|
|
(define shuffle-list
|
|
(lambda (l c)
|
|
(if (zero? c)
|
|
l
|
|
(let-values ([(a b)
|
|
(let ([half (floor (/ (length l) 2))])
|
|
(values
|
|
(let loop ([l l][n half])
|
|
(if (zero? n)
|
|
null
|
|
(cons (car l) (loop (cdr l) (sub1 n)))))
|
|
(list-tail l half)))])
|
|
(shuffle-list
|
|
(let loop ([a a][b b][l null])
|
|
(cond
|
|
[(null? a) (append (reverse b) l)]
|
|
[(null? b) (append (reverse a) l)]
|
|
[(zero? (random 2))
|
|
(loop (cdr a) b (cons (car a) l))]
|
|
[else
|
|
(loop a (cdr b) (cons (car b) l))]))
|
|
(sub1 c)))))))
|