IF242 DS 29/04/2002 (Variant 2)
exercice 1
# type prog = Vide
| Ecrire of prog
| Lire of prog
| Si of prog * prog * prog;;
type prog = Vide | Ecrire of prog | Lire of prog | Si of prog * prog
* prog
exercice 2
# let rec lignes p = match p with
| Vide -> 0
| Lire p' -> 1 + lignes
p'
| Ecrire p' -> 1 + lignes
p'
| Si (q,r,s) -> 4 + (lignes
q) + (lignes r) + (lignes s);;
val lignes : prog -> int = <fun>
exercice 3
# let rec lire p = match p with
| Vide -> 0.0
| Lire p' -> 1.0 +. lire
p'
| Ecrire p' -> lire p'
| Si (q,r,s) -> (lire q)
+. (lire r) +. (lire s);;
val lire : prog -> float = <fun>
exercice 4
# let rec concat p1 p2 = match p1 with
| Vide -> p2
| Lire p' -> Lire (concat
p' p2)
| Ecrire p' -> Ecrire (concat
p' p2)
| Si (q,r,s) -> Si (q,r,concat
s p2);;
val concat : prog -> prog -> prog = <fun>
# let rec tete p = match p with
| Vide -> Vide
| Lire (p') -> Lire (tete
p')
| Ecrire (p') -> Ecrire
(tete p')
| Si (p, q, r) -> Vide;;
val tete : prog -> prog = <fun>
# let rec queue p = match p with
| Lire p' -> queue p'
| Ecrire p' -> queue p'
| _ -> p;;
val queue : prog -> prog = <fun>
# let rec ecrire p = match p with
| Vide -> 0.0
| Lire p' -> ecrire p'
| Ecrire p' -> 1.0 +. ecrire
p'
| Si (q,r,s) -> (ecrire
q) +. (ecrire r) +. (ecrire s);;
val ecrire : prog -> float = <fun>
# let rec _fenetre l p = match p with
| Vide -> 0.0
| Si (q,r,s) -> ((_fenetre
l (concat q s)) +.
(_fenetre l (concat r s)))/.2.0
| _ -> let t = tete p in
(if (l > 0.0)
then max (lire t) (ecrire t -. l)
else max (lire t +. l) (ecrire t)
) +. (_fenetre (l +. (lire t) -. (ecrire t)) (queue p));;
val _fenetre : float -> prog -> float = <fun>
# let fenetre = _fenetre 0.0;;
val fenetre : prog -> float = <fun>
Home Up