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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Author: Jean-Michel Ferrard

Professeur de mathématiques en classe préparatoire aux grandes écoles.