Exercice 1


1.

#type périphérique = Clavier | Écran | Disque_dur;;
Le type périphérique est défini.
#type unité_centrale = { carte_mère: int; mémoire: int * int };;
Le type unité_centrale est défini.
#type machine = { uc: unité_centrale; périph: périphérique list };;
Le type machine est défini.

2.

#let a_clavier pl = mem Clavier pl
 and a_écran pl = mem Écran pl
 and a_disque_dur pl = mem Disque_dur pl;;
a_clavier : périphérique list -> bool = <fun>
a_écran : périphérique list -> bool = <fun>
a_disque_dur : périphérique list -> bool = <fun>
#let liste_complète pl = a_clavier pl && a_écran pl && a_disque_dur pl;;
liste_complète : périphérique list -> bool = <fun>
#let compatibilité m =
   list_length m.périph <= m.uc.carte_mère ;;
compatibilité : machine -> bool = <fun>
#let mémoire_totale m = 
   match m.uc.mémoire with (nb, c) -> nb * c;;
mémoire_totale : machine -> int = <fun>

3.

#type info_périphérique = 
   { nom_périph: périphérique; prix: int; quantité: int; seuil: int };;
Le type info_périphérique est défini.

4.

#let rec info_périph nom stock = 
   match stock with
   | [] -> failwith "périph indisponible"
   | périph'::stock' -> 
       if périph'.nom_périph=nom then périph' else info_périph nom stock';;
info_périph : périphérique -> info_périphérique list -> info_périphérique =
 <fun>
#let prix_périph nom stock = (info_périph nom stock).prix;;
prix_périph : périphérique -> info_périphérique list -> int = <fun>
#let rec prix_lot lot stock =
   match lot with
   | [] -> 0
   | (tp, n) :: lot' -> 
       n *(prix_périph tp stock)+ prix_lot lot' stock;;
prix_lot : (périphérique * int) list -> info_périphérique list -> int = <fun>

5.

#let rec mise_à_jour_périph nom quantité stock =
   match stock with
   | [] -> failwith "périph indisponible"
   | périph::stock' ->
       if périph.nom_périph = nom then
         { quantité = périph.quantité-quantité; 
           nom_périph = périph.nom_périph; 
           prix = périph.prix; seuil = périph.seuil } :: stock' 
       else
         périph::(mise_à_jour_périph nom quantité stock);;
mise_à_jour_périph :
 périphérique -> int -> info_périphérique list -> info_périphérique list =
 <fun>
#let rec mise_à_jour_lot lot stock =
   match lot with
   | [] -> stock
   | (nom, quantité)::lot' -> 
       mise_à_jour_lot lot' (mise_à_jour_périph nom quantité stock);;
mise_à_jour_lot :
 (périphérique * int) list -> info_périphérique list -> 'a list = <fun>

6.

#let rec périphériques_à_commander stock =
   match stock with
   | [] -> []
   | {nom_périph = n; quantité = q; seuil = s} :: stock' ->
       if q < s
       then (n, s)::(périphériques_à_commander stock')
       else périphériques_à_commander stock';;
périphériques_à_commander :
 info_périphérique list -> (périphérique * int) list = <fun>

Ce document a été traduit de LATEX par HEVEA.