On Dec 3, 2008, at 17:45, Mark H. wrote:

> I have the feeling that the "right interface" for a single stream of
> pseudorandom numbers is a seq, rather than a "function" that you
> call.

I'd provide two interfaces:

1) Low-level: (rng seed) yielding a pair [random-number, new-seed]
2) High-level: (random seed) yielding an infinite (obviously lazy)  
seq of the random numbers obtained starting from the given seed.

What I consider important is the explicit specification of the seed,  
which means that the code always says explicitly where its random  
number sequence starts from.


I just happen to have those two functions in the example section of  
my monad implementation, as rng works nicely in the state monad:

(defn rng [seed]
   (let [m      259200
        value  (/ (float seed) (float m))
        next   (rem (+ 54773 (* 7141 seed)) m)]
     (list value next)))

(defn random [seed]
   (let [[value next] (rng seed)]
     (lazy-cons value (random next))))

This particular implementation of rng is probably not a good one  
(it's the first algorithm I found), but my point here is the  
interface, not the algorithm.

Konrad.


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to