I think the problem is that you aren't *calling* Random.self_init. To do so, change the line   let _ = Random.self_init to   let () = Random.self_init () The value that _ is matching against in your program has type unit -> unit rather than just unit.  — Sent from Mailbox On Wed, May 21, 2014 at 8:12 AM, Ollie Frolovs wrote: > Hello > I’ve been trying to use Random.self_init in Jane Street’s Core but every time I run my program it returns the same result as if the self_init is in fact completely deterministic. Two questions – what am I doing wrong and how do I make it “random” (as in returning different values on each run of the application). > I compile the following source into native code with “corebuild”. > When I run the program, the result is ALWAYS > 1 0 > 1 1 > 0 1 > 0 2 > 0 3 > I’ve also upload the code and the output from "opam list -i” on GitHub, if that’s more convenient https://gist.github.com/olliefr/d6312d8195e9a30aa80c > I believe I have the latest compiler/libraries. The system is OS X Mavericks. > Many thanks, > Ollie > -- > (* SOURCE CODE BEGINS *) > open Core.Std > > let _ = Random.self_init > (* > FIXME there must be something in the standard library to do this! > > Iterate a function over a value, tail-recursively. > n: how many times > f: function to apply > a: initial value of the argument > *) > let rec iterate n f a = > if n<=0 > then a > else iterate (n-1) f (f a) > (* Wandering Light *) > let light = (0,0) > let wander (x,y) = > match (1 + Random.int 4) with > 1 -> (x+1, y) > | 2 -> (x, y+1) > | 3 -> (x-1, y) > | 4 -> (x, y+1) > | _ -> failwith "random direction is not 1 to 4, wtf?" > > let render (x,y) = printf "%i %i\n" x y > > let step light = > let newlight = wander light in > render newlight; > newlight > > let _ = iterate 5 step (0,0) > (* THE END *) > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs