OCaml. Exercices sur les listes (2/3)

Exercice 11.
Écrire une fonction “concat : ‘a list -> ‘a list -> ‘a list” qui concatène deux listes, donc qui fait exactement la même chose que l’opérateur infixe intégré “@”, qui s’écrit aussi “(@)” en mode préfixé.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 12.
Écrire une fonction “invlist : ‘a list -> ‘a list” qui inverse l’ordre des éléments d’une liste (donc qui fait exactement la même chose que la fonction intégrée “List.rev”).
Indication : utiliser une fonction récursive locale “aux” prenant en arguments deux listes x et y et renvoyant la liste formée de la concaténation de “y inversée” puis de x.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 13.
Écrire une fonction “maxlist : ‘a list -> ‘a” qui renvoie le plus grand élément d’une liste.
La liste passée en argument pourra contenir des entiers, des flottants, des chaînes, des caractères (en tout cas tous les types acceptés par la fonction intégrée “max”).
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 14.
Écrire une fonction “minmaxlist : ‘a list -> ‘a * ‘a” qui renvoie le couple formé par le plus petit et plus grand élément d’une liste.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 15.
Écrire une fonction “min2list : ‘a list -> ‘a * ‘a” qui retourne le couple des deux plus petits éléments.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 16.
Écrire une fonction “nocs :: ‘a list -> ‘a -> int” qui renvoie le nombre de fois qu’un élément figure dans une liste.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 17.
Écrire une fonction “ocsmin : ‘a list -> ‘a * int ” qui renvoie le couple formé par l’élément minimum d’une liste et le nombre de fois où il apparaît.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 18.
Écrire une fonction “lastlist : ‘a list -> ‘a” renvoyant le dernier élément d’une liste.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 19.
La fonction “exists” teste si un élément d’une liste satisfait à un prédicat.
La syntaxe est “exists test liste”, avec “test” de type “‘a -> bool” et “liste” de type “‘a list”, et la réponse est un booléen.
Écrire une fonction “myexists : (‘a -> bool) -> ‘a list -> bool” implémentant la fonction “exists”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 20.
Écrire deux fonctions “firstoccur :’a list -> (‘a -> bool) -> ‘a -> ‘a” (resp. “lastoccur”) renvoyant le premier (resp. le dernier) élément satisfaisant à un test logique dans une liste (et une valeur par défaut si aucun élément n’est trouvé), avec la syntaxe “firstoccur test liste def” et ” lastoccur test liste def”.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez :