Ocaml. Fonctions intégrées sur les listes (3/3)

On se propose de réécrire ici les fonctions intégrées de OCaml sur les listes.
On leur donnera le nom “my_func” si “func” est le nom de la fonction Caml à réécrire.
On écrira systématiquement des filtrages par cas.

Exercice 21.
Réécrire “union : ‘a list -> ‘a list -> ‘a list” (on pourra utiliser la fonction “mem”)
Rappel : ” union l1 l2″ concatène à “l2” les éléments de “l1” qui n’apparaissent pas dans “l2”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 22.
Réécrire “intersect : ‘a list -> ‘a list -> ‘a list” (on pourra utiliser la fonction “mem”)
Rappel : “intersect l1 l2” renvoie la sous-liste des éléments de “l1” qui apparaissent dans “l2”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 23.
Réécrire la fonction “index : ‘a -> ‘a list -> int
Rappel : “index a l” renvoie la position de la première occurrence de “a” dans “l”.
On lève une exception si “a” n’est pas trouvé.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 24.
Réécrire la fonction “assoc : ‘a -> (‘a * ‘b) list -> ‘b
Rappel : “assoc a l” renvoie l’élément “b” du couple “(a,b)” dans lequel “a” apparaît pour la première fois.
On lève une exception si “a” n’est jamais le premier élément d’un couple de “l”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 25.
Réécrire la fonction “assq : ‘a -> (‘a * ‘b) list -> ‘b
Rappel : même fonctionnement que “assoc” mais en utilissant l’égalité physique.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 26.
Réécrire “mem_assoc : ‘a -> (‘a * ‘b) list -> bool”
Rappel : dit si “a” est apparu comme premier élément d’un couple de “l”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 27.
Réécrire “split : (‘a * ‘b) list -> ‘a list * ‘b list”
Rappel : “split [(a1,b1);…;(an,bn)]” renvoie “([a1;…;an], [b1;…;bn])”
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 28.
Réécrire “combine : ‘a list * ‘b list -> (‘a * ‘b) list”
Rappel : “combine ([a1;…;an], [b1;…;bn])” renvoie “[(a1,b1);…;(an,bn)]”.
On lève une exception si les longueurs sont différentes.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 29.
Réécrire “map_combine : (‘a * ‘b -> ‘c) -> ‘a list * ‘b list -> ‘c list”
Rappel : ” map_combine [a1;…;an], [b1;…;bn]” renvoie “[f (a1,b1);…;f(an,bn)]”.
On lève une exception si les longueurs sont différentes.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 30.
Réécrire la fonction “List.iter_combine : (‘a * ‘b -> unit) -> ‘a list * ‘b list -> unit”
Rappel : “List.iter_combine f([a1 ;… ;an], [b1 ;… ;bn])” effectue “f(a1,b1) ;… ;f(an,bn);”.
Les résultats sont perdus. On lève une exception si les longueurs sont différentes.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez :