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.
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.
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.
"""
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"
| 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 |
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.
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"
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",
Implementa clean3 in modo che faccia tutto ciò che fa la funzione precedente e converta il kebab-case in camelCase.
clean3 "à-ḃç"
--> "àḂç"
Implementa clean4 in modo che faccia tutto ciò che fa la funzione precedente e ometta tutte le cifre.
clean4 "123"
--> ""
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"
Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.