# [racket] on reversing a list by way of sort

In Tue, Sep 16, 2014 at 11:08 PM, Daniel Prager
<daniel.a.prager at 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!