caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Random.self_init in Jane Street Core
@ 2014-05-21 12:10 Ollie Frolovs
  2014-05-21 12:18 ` Dmitry Grebeniuk
  2014-05-23  0:12 ` Nathan Mishra Linger
  0 siblings, 2 replies; 9+ messages in thread
From: Ollie Frolovs @ 2014-05-21 12:10 UTC (permalink / raw)
  To: caml users

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 *)

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-05-23  0:15 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-21 12:10 [Caml-list] Random.self_init in Jane Street Core Ollie Frolovs
2014-05-21 12:18 ` Dmitry Grebeniuk
2014-05-21 12:25   ` Ollie Frolovs
2014-05-21 12:28     ` David House
2014-05-21 16:40       ` Martin Jambon
2014-05-22  9:01         ` Ben Millwood
2014-05-22 17:22           ` Martin Jambon
2014-05-23  0:12 ` Nathan Mishra Linger
2014-05-23  0:15   ` Nathan Mishra Linger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).