j'ai un sujet a rendre en caml et le caml, c'est pas trop ma tasse de the ...
Si qq'un pourrait m'aider, ca serait sympa de sa part !

Voila je sujet:
Il s’agit de réaliser une application en langage Caml permettant d’analyser un arbre binaire suivant certains critères. Les arbres binaires susceptibles d’être analysés pourront contenir un ensemble d’informations quelconques.
Dans une première phase, on définira les éléments nécessaires (type polymorphe et fonction générique) à l’analyse de l’arbre.
Dans une deuxième phase, on étudiera plus précisément un cas spécifique d’arbre binaire : un arbre généalogique inversé (une personne est à la racine de l’arbre, ses parents sont au 2ème niveau, ..., ses ancêtres sont les feuilles de l’arbre.)
Première phase
1. Définir un type polymorphe permettant de représenter un arbre binaire quelconque.
Exemple : #type 'a tree = Leaf of 'a | Node of 'a tree * 'a tree;;
Le type ‘a tree ainsi défini est un noeud d’un arbre binaire qui est :
- soit une feuille contenant une entité de type ‘a,
- soit un noeud interne contenant un fils gauche et un fils droit, tous deux de même type que leur père, codés sous la forme d’un couple.
2. Définir une fonction générique récursive prenant en argument une fonction f et un arbre binaire et qui retourne la liste des résultats de l’application de f à tous les noeuds de l’arbre.
Exemple : soit un type d’arbre binaire dont les feuilles (uniquement) contiennent des valeurs entières, défini comme suit :
#type inttree = Leaf of int | Node of inttree * inttree;;
Une fonction calculant la somme des entiers d'un tel arbre sera :
#let rec total = fun (Leaf n) -> n
| (Node (t1,t2)) -> total t1 + total t2;;
Remarque : dans cet exemple, uniquement les feuilles contiennent des valeurs ce qui n’est pas le cas du type demandé à la question précédente.
Deuxième phase
1. Définir un type particulier permettant de représenter un type contenant les informations suivantes :
- nom de la personne : chaîne de caractères
- année de naissance : entier
- année de décès : entier
- nationalité : chaîne de caractères
2. Définir une fonction prenant en argument une entité e du type défini à la question précédente et une chaîne de caractères ch et qui retourne 1 si ch est identique à la nationalité de e et 0 sinon.
3. En utilisant tout ce qui a été défini précédemment, écrire la fonction permettant de dénombrer les personnes d’un arbre généalogique qui sont d’une même nationalité donnée en argument d’entrée.
4. Définir et initialiser une variable globale décrivant un exemple d’arbre généalogique inversé. Tester vos fonctions avec cette variable.