Hi,

For the purposes of testing another function (not discussed here), I
wrote a function to generate random strings.  This is what I ended up
with after some trial and error.

  (defn generate-data [size maxlength]
    ; Returns a collection of 'size random strings, each at most
'maxlength chars.
    (let [alphabet     "abcdefghijklmnopqrstuvwxyz"
          rand-letter  (fn [_] (nth alphabet (rand-int 26)))
          rand-stream  (map rand-letter (iterate inc 0))
          rand-string  (fn [n] (apply str (take n rand-stream)))]
      (map (fn [_] (rand-string (rand-int maxlength)))
           (range size))))

    ; test
  (generate-data 25 19)


The output of the testing function is something like ("gr", "gry",
"gr", "g", "gry").  That is, is always _takes_ from the same sequence
of random characters.

Is there a way I might modify the above code so rand-stream is indeed
a stream (with new random data each time) instead of a sequence (where
every _take_ starts from the beginning)?

Of course, I'd love to see other people's approach to implementing
'generate-data, but I'm also curious about the idea of streams
themselves.

Cheers,
Gavin [second post]
--~--~---------~--~----~------------~-------~--~----~
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
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to