Limpinho

Limpinho

Exercício de aprendizagem

Introdução

Strings

Os carateres e as strings são a base da representação de texto em Elm. As strings podem ser vistas como listas de carateres, e a maioria das funções de List tem o seu equivalente no módulo String.

Carateres

O tipo Char representa um único caráter unicode, entre aspas simples, por exemplo 'a'. O módulo Char disponibiliza funções de predicado (Char -> Bool) para testar qualidades de um caráter: isUpper, isLower, isAlpha e isAlphaNum. O módulo também disponibiliza funções para converter um caráter com toUpper, toLower, toLocaleUpper e toLocaleLower, bem como de e para o seu valor numérico unicode (Int) com toCode e fromCode.

Strings

O tipo String fornece uma representação incorporada para manipular strings de forma eficiente e pode representar qualquer sequência de carateres unicode, por exemplo "isto é uma string de Elm." As strings com várias linhas são representadas com aspas duplas triplas e podem conter aspas e mudanças de linha não escapadas.

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

Funções de String

O módulo String contém todas as funções resumidas na tabela abaixo. Algumas das funções mais utilizadas incluem:

cons : Char -> String -> String adiciona um caráter ao início de uma string.

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

(++): String -> String -> String junta duas strings.

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

split : String -> String -> List String divide uma string numa lista de strings, no separador indicado.

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

join : String -> List String -> String concatena uma lista de strings com um separador indicado.

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

replace : String -> String -> String -> String substitui todas as ocorrências de uma substring indicada.

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

length : String -> Int devolve o número de carateres de uma string.

length "Hello world." 
    --> 12

toInt : String -> Maybe Int tenta converter uma string em Just Int e devolve Nothing para strings com formato inválido.

toInt "-42" 
    --> Just -42

contains : String -> String -> Bool verifica se a segunda string contém a primeira.

contains "the" "theory" 
    --> True

map : (Char -> Char) -> String -> String aplica uma função indicada a cada Char da string. Repara que a função fornecida tem de ser um mapeamento de e para Char.

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

Todas as funções de String:

Manipular Substrings Verificar Converter Ordem superior
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

Instruções

Neste exercício vais implementar um conjunto parcial de funções utilitárias para ajudar um programador a limpar nomes de identificadores.

Ao longo das 5 tarefas vais construir gradualmente a função clean. Um identificador válido é composto por zero ou mais letras e underscores.

Se for passada uma string vazia à função clean, deve ser devolvida uma string vazia.

1. Substitui os espaços por underscores

Implementa uma função clean1 que substitua todos os espaços por underscores. Isto também se aplica aos espaços no início e no fim.

clean1 "my   Id"
    --> "my___Id"

2. Substitui os carateres de controlo pela string "[CTRL]" em maiúsculas

Implementa a clean2 para fazer tudo o que a função anterior faz e substituir os carateres de controlo comuns (\n, \t e \r) pela string "[CTRL]".

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

3. Converte kebab-case em camelCase

Implementa a clean3 para fazer tudo o que a função anterior faz e converter kebab-case em camelCase.

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

4. Omite os algarismos

Implementa a clean4 para fazer tudo o que a função anterior faz e omitir todos os algarismos.

clean4 "123"
    --> ""

5. Omite as letras gregas minúsculas

Por fim, implementa a clean para fazer tudo o que a função anterior faz e omitir quaisquer letras gregas no intervalo entre 'α' e 'ω'.

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
Editar via GitHub A ligação abre numa nova janela ou separador
Elm Exercism

Estás pronto para começar Limpinho?

Inscreve-te no Exercism para aprenderes e dominares Elm com 28 conceitos110 exercícios, e mentoria humana real, tudo grátis.