I started playing around recently with F# and I find it quite elegant and succinct language.
A common problem I like to solve in every language I start to learn is the coin flip problem, with the code below being the solution to this particular problem.
What the code does is to flip a coin
N times and perform
M tests for each flip series. Finally, it prints in console a binomial distribution visual.
I am new to F# and I might being hasty here, I probably will learn this myself much later, but is anybody that can suggest a refactoring? Is it possible to make this even more succinct?
I solved the problem with code very similar to imperative style and I refactored my way to the following code, trying keep it as much as declarative as I could.
open System let heads (random: Random) = random.Next(0, 2) = 1 let add x y = x + y let rec calculateHeads n random = match n with | 0 -> 0 | _ -> let result = calculateHeads (n - 1) random let addToResult v = add v result match heads (random) with | true -> addToResult 1 | false -> addToResult 0 let rec fill frequency n m random = match m with | v when v < 0 -> frequency | _ -> let count = calculateHeads n random Array.set frequency count (frequency.[count] + 1) fill frequency n (m - 1) random let getFrequencies n m = let random = new Random() let frequency = Array.create (n + 1) 0 fill frequency n m random let rec displayAsterisk length = match length with | v when v = 1 -> "*" | v when v < 1 -> "" | _ -> "*" + (displayAsterisk (length - 10)) let rec displayRecursive list = match list with |  -> () | head::tail -> displayRecursive tail printfn "%d%s -- (%d)" head (displayAsterisk (head)) head let displayCoin (frequency:int) = displayRecursive (frequency |> Array.toList) [<EntryPoint>] let main argv = let frequency = getFrequencies 32 1000 displayCoin frequency 0