Track
/
Elm
Elm
/
Esercizi
/
Lindo e pulito
Lindo e pulito

Lindo e pulito

Esercizio di apprendimento

Introduzione

Stringhe

I caratteri e le stringhe costituiscono la base per la rappresentazione del testo in Elm. Le stringhe si possono pensare come liste di caratteri e la maggior parte delle funzioni di List ha il suo equivalente nel modulo String.

Caratteri

Il tipo Char rappresenta un singolo carattere unicode racchiuso tra virgolette singole, ad esempio 'a'. Il modulo Char fornisce funzioni di predicato (Char -> Bool) per verificare le qualità di un carattere: isUpper, isLower, isAlpha e isAlphaNum Il modulo fornisce anche funzioni per convertire un carattere in maiuscolo o in minuscolo (toUpper, toLower, toLocaleUpper, toLocaleLower), nonché da e verso il suo valore numerico unicode (Int) con toCode e fromCode.

Stringhe

Il tipo String fornisce una rappresentazione integrata per manipolare le stringhe in modo efficiente e può rappresentare qualsiasi sequenza di caratteri unicode, ad esempio «questa è una stringa di Elm». Le stringhe su più righe sono rappresentate con tre virgolette doppie e possono contenere virgolette e interruzioni di riga senza caratteri di escape.

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

Funzioni per le stringhe

Il modulo String contiene tutte le funzioni riassunte nella tabella qui sotto. Alcune delle funzioni più usate sono:

cons : Char -> String -> String aggiunge un carattere all'inizio di una stringa.

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

(++): String -> String -> String concatena due stringhe.

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

split : String -> String -> List String divide una stringa in una lista di stringhe in corrispondenza del separatore indicato.

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

join : String -> List String -> String unisce una lista di stringhe con un dato separatore.

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

replace : String -> String -> String -> String sostituisce tutte le occorrenze di una data sottostringa.

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

length : String -> Int restituisce il numero di caratteri di una stringa.

length "Hello world." 
    --> 12

toInt : String -> Maybe Int prova a convertire una stringa in Just Int e restituisce Nothing per le stringhe con un formato non valido.

toInt "-42" 
    --> Just -42

contains : String -> String -> Bool verifica se la seconda stringa contiene la prima.

contains "the" "theory" 
    --> True

map : (Char -> Char) -> String -> String applica una data funzione a ogni Char della stringa. Nota che la funzione fornita deve essere una mappatura da e verso Char.

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

Tutte le funzioni di String:

Manipolazione Sottostringhe Verifica Conversione Ordine superiore
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

Istruzioni

In questo esercizio implementerai un insieme parziale di funzioni di utilità per aiutare uno sviluppatore a ripulire i nomi degli identificatori.

Nelle 5 attività costruirai gradualmente la funzione clean. Un identificatore valido è composto da zero o più lettere e trattini bassi.

Se alla funzione clean viene passata una stringa vuota, deve essere restituita una stringa vuota.

1. Sostituisci gli spazi con i trattini bassi

Implementa una funzione clean1 che sostituisca gli spazi con i trattini bassi. Questo vale anche per gli spazi all'inizio e alla fine.

clean1 "my   Id"
    --> "my___Id"

2. Sostituisci i caratteri di controllo con la stringa in maiuscolo «[CTRL]»

Implementa clean2 in modo che faccia tutto ciò che fa la funzione precedente e sostituisca i caratteri di controllo comuni (\n, \t e \r) con la stringa "[CTRL]".

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

3. Converti il kebab-case in camelCase

Implementa clean3 in modo che faccia tutto ciò che fa la funzione precedente e converta il kebab-case in camelCase.

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

4. Ometti le cifre

Implementa clean4 in modo che faccia tutto ciò che fa la funzione precedente e ometta tutte le cifre.

clean4 "123"
    --> ""

5. Ometti le lettere greche minuscole

Infine, implementa clean in modo che faccia tutto ciò che fa la funzione precedente e ometta qualsiasi lettera greca nell'intervallo da 'α' a 'ω'.

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elm Exercism

Vuoi iniziare Lindo e pulito?

Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.