Author: Christian.Queinnec@lip6.fr

## Introduction

The reason to prefer one programming language over another lies in the ease of developing and maintaining robust applications. Therefore, we conclude the first part of this book, which dealt with a general presentation of the Objective CAML language, by demonstrating its use in a number of applications.
The first application implements a few functions which are used to write database queries. We emphasize the use of list manipulations and the functional programming style. The user has access to a set of functions with which it is easy to write and run queries using the Objective CAML language directly. This application shows the programmer how he can easily provide the user with most of the query tools that the user should need.
The second application is an interpreter for a tiny BASIC1. This kind of imperative language fueled the success of the first microcomputers. Twenty years later, they seem to be very easy to design. Although BASIC is an imperative language, the implementation of the interpreter uses the functional features of Objective CAML, especially for the evaluation of commands. Nevertheless, the lexer and parser for the language use a mutable structure.
The third application is a one-player game, Minesweeper, which is fairly well-known since it is bundled with the standard installation of Windows systems. The goal of the game is to uncover a bunch of hidden mines by repeatedly uncovering a square, which then indicates the number of mines around itself. The implementation uses the imperative features of the language, since the data structure used is a two-dimensional array which is modified after each turn of the game. This application uses the `Graphics` module to draw the game board and to interact with the player. However, the automatic uncovering of some squares will be written in a more functional style.
This latter application uses functions from the `Graphics` module described in chapter 5 (see page ??) as well as some functions from the `Random` and `Sys` modules (see chapter 8, pages ?? and ??).