Département d'Informatique
Licence Informatique 2001-2002
Programmation Fonctionnelle
15 octobre



La puissance d'abstraction d'un langage fonctionnel
(quand programmer consiste à rechercher un théorème en mathématiques)



I   Récursivité et décomposition par cas



    1. Réduction d'une fraction

      Utiliser le lemme d'Euclide :

      « Soient a et b deux entiers relatifs. S'il existe deux entiers relatifs q et r tels que a = b.q + r alors pgcd(a, b) = pgcd(b,r). »


      pour définir une fonction CAML qui calcule le pgcd de deux entiers relatifs.

    2. Arithmétique entière

      Définir les opérations arithmétiques sur les entiers naturels (somme, produit, quotient entier, reste) à partir de 2 opérations prédéfinies: succ (successeur) et pred (prédécesseur).

    3. Fonctions récursives classiques

      • Factorielle
      • Fibonnacci
      • Triangle de Pascal
      • Ackermann
        ack(0,y) = y+1 y>0
        ack(x,0) = ack(x-1,1) x>0
        ack(x,y) = ack(x-1,ack(x,y-1)) x>0, y>0


II   Fonctions d'ordre supérieur

    1. Somme d'une série entière

      Définir une fonction CAML qui, étant donnés une suite u et un entier n, calcule la somme des n premiers termes de u:
      n-1
      Σ
      p=0
      up

    2. Dérivée

      Définir une fonction CAML qui, étant donnés une fonction f à variable réelle et un réel x0, calcule une valeur approchée de la dérivée f'(x0) de f au point x0 (on supposera que f'(x0) existe). En déduire l'expression en CAML d'une fonction qui retourne la dérivée f' d'une fonction dérivable f quelconque.

    3. Composée

      Écrire en CAML la définition d'une fonction qui, étant donnés 2 fonctions f et g, calcule la composée f ° g de f avec g (on supposera les fonctions f et g du bon type).


This document was translated from LATEX by HEVEA.