3 people like it.
Like the snippet!
Project Euler Problem 31
In England the currency is made up of pound, £, and pence, p, and there are eight coins in general circulation:
1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p).
It is possible to make £2 in the following way:
1x£1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p
How many different ways can £2 be made using any number of coins?
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:

// Generator of change variants for any sum and set of coin denominations
let rec change sum coins =
if sum = 0 then [[]]
else
match coins with
 h::t >
let xs = change sum t
if sum >= h then
let ys = change (sum  h) coins > List.map (fun xs > h :: xs)
List.append xs ys
else
xs
 [] > []
// Application to Problem 31
change 200 [200;100;50;20;10;5;2;1]
> List.length
> printfn "Project Euler Problem 31 Answer: %d"

val change : sum:int > coins:int list > int list list
Full name: Script.change
val sum : int
val coins : int list
val h : int
val t : int list
val xs : int list list
val ys : int list list
Multiple items
module List
from Microsoft.FSharp.Collections

type List<'T> =
 ( [] )
 ( :: ) of Head: 'T * Tail: 'T list
interface IEnumerable
interface IEnumerable<'T>
member Head : 'T
member IsEmpty : bool
member Item : index:int > 'T with get
member Length : int
member Tail : 'T list
static member Cons : head:'T * tail:'T list > 'T list
static member Empty : 'T list
Full name: Microsoft.FSharp.Collections.List<_>
val map : mapping:('T > 'U) > list:'T list > 'U list
Full name: Microsoft.FSharp.Collections.List.map
val xs : int list
val append : list1:'T list > list2:'T list > 'T list
Full name: Microsoft.FSharp.Collections.List.append
val length : list:'T list > int
Full name: Microsoft.FSharp.Collections.List.length
val printfn : format:Printf.TextWriterFormat<'T> > 'T
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
More information