Programmation fonctionnelle : TP 2

Compléments de syntaxe

Comme nous l'avons vu au précédent TP, les entiers sont très différents des flottants. Il est cependant possible de convertir certains types de base en d'autres à l'aide de fonctions prédéfinies.

Il existe d'autres fonctions de conversion. De manière générale, les spécifications détaillées de toute la bibliothèque standard Ocaml sont accessibles depuis la page http://caml.inria.fr.

Enregistrements et couples

Un rationnel p/q peut être représenté à l'aide d'un enregistrement ou d'un couple.

Types sommes et types énumérés

Mixité entiers/flottants

Les entiers (au sens int) sont très différents des flottants mais les définitions de type nous permettent cependant de les manipuler en un seul type.

Money (money money...)

Fonctions récursives

Étude du calcul d'une puissance

Suite de Fibonacci

La suite de Fibonacci est une suite d'entiers usuellement définie comme suit:

fib(0) = 0
fib(1) = 1
∀ n,   fib(n+2)=fib(n+1)+fib(n)

Le temps de calcul important pour des valeurs relativement faibles du paramètre peut s'expliquer par le très grand nombre d'appels récursifs requis pour cette méthode. En effet, pour calculer fib(n+2), il faut calculer fib(n+1) et fib(n). Mais pour calculer fib(n+1), il faut calculer fib(n) et fib(n-1). il faut donc effectuer de l'ordre de 2n opérations pour calculer fib(n). On peut cependant calculer cette suite plus efficacement (de l'ordre de n opérations), en utilisant la définition suivante et à l'aide de couples:

fib_aux(0) = (1, 0)
∀ n,   fib_aux(n+1)=(a+b, a) si fib_aux(n)=(a, b)
La valeur de fib(n) est alors toujours le second membre du couple fib_aux(n).