Parcours
/
Elm
Elm
/
Exercices
/
Propre comme un sou neuf
Propre comme un sou neuf

Propre comme un sou neuf

Exercice d'apprentissage

Introduction

Chaînes de caractères

En Elm, les caractères et les chaînes de caractères constituent la base de la représentation du texte. On peut voir une chaîne de caractères comme un tableau de caractères, et la plupart des fonctions de List ont leur équivalent dans le module String.

Caractères

Le type Char représente un seul caractère unicode, entouré d'apostrophes, par exemple 'a'. Le module Char fournit des fonctions de prédicat (Char -> Bool) pour tester les propriétés d'un caractère : isUpper, isLower, isAlpha et isAlphaNum Le module fournit aussi des fonctions pour convertir un caractère avec toUpper, toLower, toLocaleUpper et toLocaleLower, ainsi que pour obtenir sa valeur unicode numérique (Int) ou la reconvertir en caractère, avec toCode et fromCode.

Chaînes de caractères

Le type String fournit une représentation intégrée pour manipuler efficacement les chaînes de caractères et peut représenter n'importe quelle séquence de caractères unicode, par exemple "this is an Elm string." Les chaînes multilignes sont représentées par des triples guillemets doubles et peuvent contenir des guillemets et des retours à la ligne non échappés.

"""
    This is a multiline string.
All line-breaks and whitespace,
are preserved. 
"""

Fonctions sur les chaînes de caractères

Le module String contient toutes les fonctions résumées dans le tableau ci-dessous. Parmi les fonctions les plus couramment utilisées, on trouve :

cons : Char -> String -> String ajoute un caractère au début d'une string.

cons 'T' "he truth is out there" 
    --> "The truth is out there"

(++): String -> String -> String ajoute deux strings bout à bout.

"butter" ++ "fly" 
    --> "butterfly"

split : String -> String -> List String découpe une string en un tableau de strings au niveau du séparateur donné.

split ";" "cat;dog;cow" 
    --> ["cat", "dog", "cow"]

join : String -> List String -> String concatène un tableau de strings avec un séparateur donné.

join "a" ["H", "w", "ii", "n"] 
    --> "Hawaiian"

replace : String -> String -> String -> String remplace toutes les occurrences d'une sous-chaîne donnée.

replace "Hello" "Goodbye cruel" "Hello world." 
    --> "Goodbye cruel world."

length : String -> Int renvoie le nombre de caractères d'une string.

length "Hello world." 
    --> 12

toInt : String -> Maybe Int essaie de convertir une string en Just Int, et renvoie Nothing quand le format de la string est incorrect.

toInt "-42" 
    --> Just -42

contains : String -> String -> Bool vérifie si la deuxième string contient la première.

contains "the" "theory" 
    --> True

map : (Char -> Char) -> String -> String applique une fonction donnée à chaque Char de la string. À noter que la fonction fournie doit être une correspondance de Char vers Char.

map (\c -> if c == '/' then '.' else c) "a/b/c" 
    --> "a.b.c"

Toutes les fonctions de String :

Manipuler Sous-chaînes Vérifier Convertir Ordre supérieur
reverse slice length toInt map
repeat left isEmpty fromInt filter
replace right contains toFloat foldl
append dropLeft startsWith fromFloat foldr
concat dropRight indexes toList any
split fromList all
join fromChar
words
lines
cons
uncons

Instructions

Dans cet exercice, tu vas implémenter un ensemble partiel de fonctions utilitaires pour aider un développeur à nettoyer des noms d'identifiants.

Au fil des 5 tâches, tu vas construire progressivement la fonction clean. Un identifiant valide comprend zéro ou plusieurs lettres et tirets bas.

Si l'on passe une string vide à la fonction clean, celle-ci doit renvoyer une string vide.

1. Remplace les espaces par des tirets bas

Implémente une fonction clean1 qui remplace tous les espaces par des tirets bas. Cela vaut aussi pour les espaces au début et à la fin.

clean1 "my   Id"
    --> "my___Id"

2. Remplace les caractères de contrôle par la string en majuscules "[CTRL]"

Implémente clean2 pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle remplace les caractères de contrôle courants (\n, \t et \r ) par la string "[CTRL]".

clean2 "my\nId"
    --> "my[CTRL]Id",

3. Convertis le kebab-case en camelCase

Implémente clean3 pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle convertisse le kebab-case en camelCase.

clean3 "à-ḃç"
    --> "àḂç"

4. Omets les chiffres

Implémente clean4 pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle omette tous les chiffres.

clean4 "123"
    --> ""

5. Omets les lettres grecques minuscules

Pour finir, implémente clean pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle omette toute lettre grecque comprise entre 'α' et 'ω'.

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Elm Exercism

Prêt à commencer Propre comme un sou neuf ?

Inscris-toi sur Exercism pour apprendre et maîtriser Elm avec 28 concepts110 exercices, et un vrai mentorat humain, le tout gratuitement.