=> (defn lazy-shuffle [v]
     (lazy-seq
       (if (seq v)
         (let [idx (rand-int (count v))]
           (cons (nth v idx)
             (lazy-shuffle (pop (assoc v idx (peek v)))))))))

=> (take 10 (lazy-shuffle (vec (range 100))))
(77 63 37 99 81 73 25 85 35 10)



On Fri, Aug 23, 2013 at 10:57 AM, NeedMoreDesu <d...@horishniy.org.ua>wrote:

> (letfn [(vec-throw-out [v i]
>          (pop (assoc v i (get v (dec (count v))))))]
>  (defn lazy-shuffle [v]
>   (if (seq v)
>    (let [idx (rand-int (count v))]
>     (cons
>      (get v idx)
>      (lazy-seq
>       (lazy-shuffle
>        (vec-throw-out v idx))))))))
>
> (let [s (range 1000000)
>       v (vec s)]
>  (time (take 10 (lazy-shuffle v)))
>  nil)
> ;; "Elapsed time: 0.092389 msecs"
>
>
>  --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>



-- 
On Clojure http://clj-me.cgrand.net/
Clojure Programming http://clojurebook.com
Training, Consulting & Contracting http://lambdanext.eu/

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to