Copyright by Jon Harrop

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

O'Reilly logo

Chapter 6. SIMPLE EXAMPLES

This chapter presents a wide variety of code snippets implementing useful functions in different ways. These examples should serve to ossify the readers understanding of the F# language in order to prepare them for the complete example programs in chapter 12. Whilst describing these functions we endeavour to explain the relationships between the styles chosen and the information disseminated in the previous chapters of this book.

FUNCTIONAL

Many useful mathematical and scientific constructs can be encoded very elegantly by exploiting the features of functional programming. In the introduction, we saw a remarkably simple and yet powerful numerical derivative function. In this section, we shall examine more functions that will be useful to scientists using F#.

Nest

The nest function is found in many technical computing environments. This combi-nator nests applications of its function argument f to a given value x a given number of times n. The nest function may be written:

> let rec nest n f x =
    match n with
    | 0 -> x
    | n -> nest (n - 1) f (f x);;
val nest : int -> ('a -> 'a) -> 'a -> 'a

Note that we have phrased the recursive call to nest such that it is tail recursive. An equivalent but non-tail-recursive implementation would have been f(nest (n - 1) f x).

For example, in the context of the numerical derivative combinator d and the example function f = x3 — x — 1 from section 1.6.4, the third derivative of f may be written:

> let f''' = nest 3 d f;; val f''' : ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required