18 lines
502 B
Scheme
18 lines
502 B
Scheme
#!r6rs
|
|
(import (rnrs base (6))
|
|
(srfi :27 random-bits))
|
|
|
|
(define (semireverse li n)
|
|
(define (continue front back n)
|
|
(cond
|
|
((null? back) front)
|
|
((zero? n) (cons (car back) (append front (cdr back))))
|
|
(else (continue (cons (car back) front) (cdr back) (- n 1)))))
|
|
(continue '() li n))
|
|
|
|
(define (shuffle li)
|
|
(if (null? li)
|
|
()
|
|
(let
|
|
((li-prime (semireverse li (random-integer (length li)))))
|
|
(cons (car li-prime) (shuffle (cdr li-prime))))))
|