Haskell : Fonction Divise

Exercices Corriges en Haskell : Fonction  Divise

Exercice corriges Programmation Fonctionnelle (Haskell)

Écrire une fonction en Haskell nommée divise qui prend en paramètre une liste, la divise en deux et retourne le couple de listes obtenu. divise [1, 2, 8, 9, 10] = ([1, 2, 8], [9, 10]).

Haskell pandacodeur

Correction :

divise :: [a] -> ([a], [a])
divise [ ] = ([ ], [ ])       -- cas d'une liste vide
divise [x] = ([x], [ ])    -- cas d'une liste avec un seul élément
divise (x:y:zs) = let (xs, ys) = divise zs in (x:xs, y:ys)

 

Explications :

La fonction divise prend en entrée une liste d'éléments de type quelconque (a) et retourne un couple de deux listes contenant les éléments de la liste d'entrée, divisée en deux.

Dans cette approche, on utilise la notation des motifs pour extraire les deux premiers éléments de la liste (x et y) et le reste de la liste (zs). On divise ensuite la liste zs en deux sous-listes en appelant récursivement la fonction divise, et on concatène les éléments x et y avec les sous-listes obtenues pour former les deux listes du résultat.

Les deux premiers cas traitent les situations où la liste d'entrée est vide ou contient un seul élément, respectivement. Dans ces cas, la liste est divisée en deux sous-listes vides et une sous-liste contenant l'unique élément, respectivement.

Ainsi, la fonction divise retourne le couple de deux listes contenant les éléments de la liste d'entrée, divisée en deux.

Notez que cette approche ne nécessite pas l'utilisation de la fonction splitAt, mais elle peut être moins performante pour les grandes listes, car elle doit parcourir la liste plusieurs fois pour extraire les sous-listes.

Autre Solution :

Une autre approche pour écrire la fonction second consiste à utiliser l'opérateur de liste (!!) qui permet d'accéder à un élément d'une liste à partir de son indice :

divise :: [a] -> ([a], [a])
divise xs = splitAt (length xs `div` 2) xs

Explications :

La fonction divise prend en entrée une liste d'éléments de type quelconque (a) et retourne un couple de deux listes contenant les éléments de la liste d'entrée, divisée en deux. La première liste contient les éléments de la liste d'entrée jusqu'à la moitié de sa taille, et la deuxième liste contient les éléments restants.

Pour diviser la liste en deux, on utilise la fonction splitAt de Haskell qui prend en entrée un indice de coupure et une liste, et retourne un couple de deux listes contenant les éléments de la liste d'entrée avant et après l'indice de coupure. Dans notre cas, on utilise l'indice de coupure égal à la moitié de la taille de la liste, obtenu en divisant la longueur de la liste par 2 à l'aide de l'opérateur div.

Ainsi, la fonction divise retourne le couple de deux listes contenant les éléments de la liste d'entrée, divisée en deux.

Notez que la signature de la fonction divise indique que l'argument est une liste d'éléments de type quelconque ([a]) et que le résultat est un couple de deux listes contenant les éléments du même type que les éléments de la liste ([a], [a]). Si l'on passe une liste vide, la fonction retourne un couple de deux listes vides, conformément à la spécification de la fonction.

 

Si vous avez trouvé les exercices corrigés en Haskell de JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage ! Contact WhatsApp : +237 658395978 | Réaliser Par Joël_Yk

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam