TP noté de
Programmation Fonctionnelle


            Durée : 1h

Avant de commencer, taper les
commandes unix suivantes :

$ chmod 700 .

$ mkdir TPNOTE

$ cd TPNOTE

Pour rendre votre copie :

mettre le fichier .ml
dans le répertoire courant (TPNOTE)

puis taper la commande :

$ /tmp/rendrecopie.sh



            On appelle "mot", une liste de caractères (de type char list)
dont tous les caractères sont des lettres de l'alphabet.

Ex.  ['E';'X';'E';'R';'C';'I';'C';'E'] est un mot.

            On appelle "motif" une liste de caractères où chaque caractère est
soit une lettre, soit le caractère '?'.

On dira qu'un mot m a le motif p si et seulement si m peut être obtenu à partir de p
en remplaçant le caractère '?' par une lettre et le caractère '*' par zéro, une ou plusieurs lettres.

Ex.  ['A';'C';'C';'T';'G';'A'] a le motif ['?';'C';'C';'*';'A'].
                (en remplaçant '?' par la lettre 'A' et '*' par 'T';'G').

- Définir une fonction list_of_string qui, étant donnée une chaine de caractères
renvoie la liste de ses caractères :

Ex.  list_of_string "ACCTGA";;
     - : char list = ['A';'C';'C';'T';'G';'A'];;

On utilisera les fonctions prédéfinies :
String.get : string -> int -> char qui retourne le n-ième caractère d'une chaine et
String
.length : string -> int qui retourne la longueur d'une chaine de caractère
.

- Définir une fonction filtre qui, étant donnés un motif p et un mot m,
détermine si m a le motif p.

Ex.  filtre ['A';'C';'C';'T';'G';'A'] ['?';'C';'C';'*';'A'];;
          - : bool = true