racket/collects/games/cards/utils.ss
2008-02-24 21:27:36 +00:00

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