 53 people like it.

# Random Walk

Random walk on integers starting at zero. At each step, we either add or subtract one depending on a random coin flip. The code uses Seq.unfold to generate infinite sequence.

 ``` 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: ``` ``````open System let ran = Random() /// Flip a coin with probability p for true let dice p = ran.NextDouble() <= p /// Random walk from zero stepping up and down according to dice p let walk p = Seq.unfold (fun z -> let z = if dice p then z+1 else z-1 Some (z,z)) 0 /// First n steps let walkFor n = walk 0.5 |> Seq.take n ``````
namespace System
val ran : Random

Full name: Script.ran
Multiple items
type Random =
new : unit -> Random + 1 overload
member Next : unit -> int + 2 overloads
member NextBytes : buffer:byte[] -> unit
member NextDouble : unit -> float

Full name: System.Random

--------------------
Random() : unit
Random(Seed: int) : unit
val dice : p:float -> bool

Full name: Script.dice

Flip a coin with probability p for true
val p : float
Random.NextDouble() : float
val walk : p:float -> seq<int>

Full name: Script.walk

Random walk from zero stepping up and down according to dice p
module Seq

from Microsoft.FSharp.Collections
val unfold : generator:('State -> ('T * 'State) option) -> state:'State -> seq<'T>

Full name: Microsoft.FSharp.Collections.Seq.unfold
val z : int
union case Option.Some: Value: 'T -> Option<'T>
val walkFor : n:int -> seq<int>

Full name: Script.walkFor

First n steps
val n : int
val take : count:int -> source:seq<'T> -> seq<'T>

Full name: Microsoft.FSharp.Collections.Seq.take