Ocaml. Fonctions intégrées sur les listes (2/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 11.
Réécrire “List.fold_left2 : (‘a -> ‘b -> ‘c -> ‘a) -> ‘a -> ‘b list -> ‘c list -> ‘a”
Rappel : “List.fold_left2 f a [b1;…;bn] [c1;…;cn]” renvoie “f(…(f(f a b1 c1) b2 c2)…) bn cn”
On lève l’exception une exception si les longueurs sont différentes.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 12.
Réécrire la fonction ” List.fold_right2 : (‘a -> ‘b -> ‘c -> ‘c) -> ‘a list -> ‘b list -> ‘c -> ‘c
Rappel : “List.fold right2 f [a1;…;an] [b1;…;bn] c” renvoie “f a1 b1 (f a2 b2 (… (f an bn c)…))”
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 13.
Réécrire la fonction “flat_List.map : (‘a -> ‘b list) -> ‘a list -> ‘b list
Rappel : “flat_List.map p [a1;…;an]” renvoie “(p a1) && (p a2) &&…&& (p an)”
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 14.
Réécrire la fonction “List.for_all : (‘a -> bool) -> ‘a list -> bool
Rappel : “List.for_all p [a1;…;an]” renvoie “(p a1) && (p a2) &&…&& (p a_n))”
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 15.
Réécrire la fonction “exists : (‘a -> bool) -> ‘a list -> bool
Rappel : “exists p [a1;…an]” renvoie “(p a1) || (p a2) || … || (p an)”
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 16.
Réécrire la fonction “List.mem ‘a -> ‘a list -> bool”
Rappel : “mem a l” renvoie “true” si et seulement si “a” is structurellement égal à un élément de “l”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 17.
Réécrire la fonction “List.memq ‘a -> ‘a list -> bool
Rappel : “memq a l” renvoie “true” si et seulement si “a” is physiquement égal à un élément de “l”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 18.
Réécrire la fonction “except : ‘a -> ‘a list -> ‘a list” (on pourra utiliser l’opérateur @)
Rappel : “except a l” renvoie la liste “l” privée de la première occurrence de “a” (égalité structurelle).
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 19.
Réécrire la fonction “exceptq : ‘a -> ‘a list -> ‘a list” (on pourra utiliser l’opérateur @)
Rappel : ” exceptq a l” renvoie la liste “l” privée de la première occurrence de “a” (égalité physique)
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 20.
Réécrire “subtract : ‘a list -> ‘a list -> ‘a list” (on pourra utiliser la fonction “mem”)
Rappel : “subtract l1 l2” renvoie “l1” privée des éléments apparaissant dans “l2”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez :