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. |
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. |
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) » |
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)) » |
Exercice 15. Réécrire la fonction « exists : (‘a -> bool) -> ‘a list -> bool Rappel : « exists p [a1;…an] » renvoie « (p a1) || (p a2) || … || (p an) » |
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 ». |
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 ». |
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). |
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) |
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 ». |