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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

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 : Pour poursuivre votre exploration, vous pouvez :

Author: Jean-Michel Ferrard

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