RosettaCodeData/Task/Knuth-shuffle/Racket/knuth-shuffle.rkt
2023-07-01 13:44:08 -04:00

16 lines
416 B
Racket

#lang racket
(define (swap! vec i j)
(let ([tmp (vector-ref vec i)])
(vector-set! vec i (vector-ref vec j))
(vector-set! vec j tmp)))
(define (knuth-shuffle x)
(if (list? x)
(vector->list (knuth-shuffle (list->vector x)))
(begin (for ([i (in-range (sub1 (vector-length x)) 0 -1)])
(define r (random (+ i 1)))
(swap! x i r))
x)))
(knuth-shuffle '(1 2 3 4))