duplique :: [a] -> [a]
duplique [ ] = [ ]
duplique (x:xs) = x:x:duplique xs
Explications :
La fonction duplique prend en entrée une liste d'éléments de type quelconque (a) et retourne une nouvelle liste où chaque élément de la liste d'entrée est dupliqué.
Dans cette implémentation, on utilise la notation des motifs pour extraire le premier élément de la liste (x) et le reste de la liste (xs). On duplique l'élément x en ajoutant deux occurrences de celui-ci à une nouvelle liste, puis on concatène cette nouvelle liste avec la liste obtenue en appelant récursivement la fonction duplique sur le reste de la liste (xs).
Le premier cas traite la situation où la liste d'entrée est vide, en retournant une liste vide.
Ainsi, la fonction duplique retourne la liste obtenue en dupliquant chaque élément de la liste d'entrée.
Notez que cette implémentation utilise la récursivité pour traiter chaque élément de la liste d'entrée, ce qui peut entraîner un coût en temps et en espace important pour les grandes listes. Cependant, elle est simple et élégante et fonctionne pour les listes de tout type.