Implémente les opérations de base sur les listes.
Dans les langages fonctionnels, les opérations sur les listes telles que length, map et reduce sont très courantes.
Implémente une série d'opérations de base sur les listes, sans utiliser les fonctions existantes.
Le nombre et les noms exacts des opérations à implémenter dépendent du parcours, afin d'éviter les conflits avec des noms existants, mais les opérations générales que tu implémenteras incluent :
append (étant donné deux listes, ajouter tous les éléments de la seconde liste à la fin de la première) ;concatenate (étant donné une série de listes, combiner tous les éléments de toutes les listes en une seule liste aplatie) ;filter (étant donné un prédicat et une liste, renvoyer la liste de tous les éléments pour lesquels predicate(item) est vrai) ;length (étant donné une liste, renvoyer le nombre total d'éléments qu'elle contient) ;map (étant donné une fonction et une liste, renvoyer la liste des résultats de l'application de function(item) à tous les éléments) ;foldl (étant donné une fonction, une liste et un accumulateur initial, replier (réduire) chaque élément dans l'accumulateur en partant de la gauche) ;foldr (étant donné une fonction, une liste et un accumulateur initial, replier (réduire) chaque élément dans l'accumulateur en partant de la droite) ;reverse (étant donné une liste, renvoyer une liste contenant tous les éléments d'origine, mais dans l'ordre inverse).Remarque : l'ordre dans lequel les arguments sont passés aux fonctions de repli (foldl, foldr) est important.
Les instructions ci-dessus sont synchronisées avec un dépôt partagé afin de garantir leur cohérence sur tous les parcours linguistiques. Cette annexe apporte des précisions supplémentaires ou modifie les instructions si nécessaire, pour mieux les aligner sur les objectifs du parcours Clojure.
Pour cet exercice du parcours Clojure, suppose que l'entrée et la sortie sont toutes deux des vecteurs, comme l'indiquent les tests. Si tu veux aller plus loin, réfléchis à la manière de mettre en œuvre une approche qui n'utilise pas de listes pour les étapes intermédiaires.
Il est important de ne pas réutiliser les fonctions intégrées de Clojure existantes qui offrent des fonctionnalités similaires, car cela réduirait l'intérêt pédagogique de l'exercice.
Les principales fonctions de l'espace de noms clojure.core à éviter sont notamment into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse et rseq.
Cet objectif facultatif s'adresse à ceux qui cherchent un défi supplémentaire, et il part du principe que tu as déjà atteint l'objectif principal.
Essaie de faire passer les tests en imaginant une approche qui suppose :
Si tu décides de publier ta solution, pense à inclure un commentaire indiquant qu'elle répond à l'objectif facultatif d'utiliser des listes. N'oublie pas de mettre à jour les docstrings !
Inscris-toi sur Exercism pour apprendre et maîtriser Clojure avec 12 concepts105 exercices, et un vrai mentorat humain, le tout gratuitement.
Découvre une introduction pratique à la récursion, explore les alternatives impératives et fonctionnelles aux opérations sur les tableaux, et plonge dans la récursion terminale et les fonctions d'accumulation.