In Tue, Sep 16, 2014 at 11:08 PM, Daniel Prager <daniel.a.pra...@gmail.com> wrote: > Here's a version of "inside-out" Fisher-Yates that should fit the bill: > > (define (fy-shuffle lst) > (define v (list->vector lst)) > (for/list ([n (in-range (length lst) 0 -1)]) > (let* ([i (sub1 n)] > [j (random n)] > [v_j (vector-ref v j)]) > (when (not (= i j)) > (vector-set! v j (vector-ref v i))) > v_j)))
I was thinking more of a direct translation, which (I think) is easier to see that it's correct: (define (shuffle l) (define a (make-vector (length l))) (for ([x (in-list l)] [i (in-naturals)]) (define j (random (add1 i))) (unless (= j i) (vector-set! a i (vector-ref a j))) (vector-set! a j x)) (vector->list a)) But the issues from my last email are still there. -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! ____________________ Racket Users list: http://lists.racket-lang.org/users