-
Book Overview & Buying
-
Table Of Contents
F# 4.0 Design Patterns
By :
Now is the perfect time to revisit the factorial function that I used at the beginning of this chapter when covering tail recursion. Let's take a sequence of bigint numbers from 1I to a value n represented by the following expression:
Seq.init (n + 1) bigint.op_Implicit |> Seq.skip 1
Does the factorial(n) function represent nothing else but a product of the factors, each being a member of the preceding sequence? Sure, it can be seen (and implemented) as such. Let me create this implementation in the best traditions of the imperative programming style as shown here (Ch7_3.fsx):
let ``folding factorial (seq)`` n =
let fs = Seq.init (n + 1) bigint.op_Implicit |> Seq.skip 1
use er = fs.GetEnumerator()
let mutable acc = 1I
while er.MoveNext() do
acc <- acc * er.Current
acc
Expressed in plain words, this implementation can be laid out in the following manner:
Take a mutable value that will serve as a result accumulator
Enumerate the sequence of factors
For each...
Change the font size
Change margin width
Change background colour