Les types construits en OCaml
S5
Types construits
Les types construits ou explicites sont des types définis par l'utilisateur!
• Type somme!
• Type enregistrement!
Le type somme!
Le type somme correspond à une union de type que l'on distingue par un marqueur ou un label. !
Le type somme en tant que collection de symboles!
• Un questionnaire (oui, non, peut-être)!
Ex l'ADN: !
L'ADN ne contient que 4 bases, mais est traditionnellement codée par des caractères. Ce type admet aussi d'autres caractères. On décrit un type ayant 4 symboles seulement correspondant aux 4 bases. !
• type =|....|
• ::=
• type adn_t = A|T|G|C;;
On a défini un ensemble de 4 symboles {A,T,G,C}! application : base complémentaire! let complémentaire b= match b with
|A->T
|G->C
|T->A
|C->G;; let complémentaire b= match b with
|'A'->'T'
|'a'->'T'
|'G'->'C'
|'g'->'C'
|'T'->'A'
|'t'->'A'
|'C'->'G'
|'c'->'G'
|_-> failwith "erreur";;
Transformation d'une séquence d'ADN en séquence d'acides aminés:! type aminoacid_t=Leu|Typ|Met|Ser|...|Stop;; let codon2aa c= match c with
|(A,A,A)-> Lys
|(A,A,T)-> Asn
INTRODUCTION À L'ALGORITHMIQUE
1
TYPES CONSTRUITS!
S5
.
.
.
|(C,C,C)->Pro;;
let rec traduction s= match s with
|a1::a2::a3::r -> codon2aa (a1,a2,a3)::traduction r
|_->[];;
Autre utilisation des types sommes!
Les jours de la semaine!
Les mots ! les questionnaires oui, non, peut-être!
Type somme comme union! type numérique (entier+flottant)! type numeric_t= Int of int |Float of float;; let x = Int 3;; let y= Float 3.5;;
Ex: addition pour le numérique! let add n1 n2= match (n1,n2) with
|(Int x1, Int x2) -> Int x1+x2
|(Float x1, Float x2) -> Float x1+.x2
|(Int x1, Float x2) -> Float (float_of_int x1)+.x2
|(Float x1, Int x2) -> Float (x1+.(float_of_int x2));;
Type somme récursif! type rec () =
Type liste entier!
'a::'a list |[] type rec 'a list_t=Empty|Cell int * intlist;; autre exemple, arbre binaire! type rec inttree=