Real Analysis Sequences in Haskell
Published on
Updated on
In Real Analysis it is useful to look at terms of a sequence. One of the best ways I’ve found to do this is in believe it or not Haskell. This is mainly for these two reasons

Support for infinite data structures

Builtin Data Type to keep fractional precision
Code
Let’s get started, first let us define a sequence by the following: $$ f(1) = 1, f(2) = 2, f(n) = \frac{1}{2}(f(n  2) + f(n  1)) $$ That is equivalent to the following haskell code:
f :: Integral a => a > Ratio a
f 1 = 1
f 2 = 2
f n = 0.5 * (f (n  2) + f (n  1))
Now to generate the sequence we just need to map $f$ onto the natural numbers.
nsequence = map f [1..]
If you want to look at specific subsequences, such as even or odd:
odd_generator n = 2 * n  1
odds = map odd_generator [1..]
even_generator n = 2 * n
evens = map odd_generator [1..]
To look at the differences between each term:
diff x = map (\(a, b) > a  b) $ zip (tail x) (init x)