=> (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.