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 la suite de 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 la suite de 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 la suite de 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 la suite de 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 la suite de 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 la suite de 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 la suite de 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 la suite de 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 la suite de 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 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.