Limpinho

Limpinho

Exercício de aprendizagem

Introdução

O tipo char do F# é um valor de 16 bits que representa os menores componentes endereçáveis de texto, imutável por padrão.

Os chars podem ser definidos como literais com aspas simples:

let ch = 'A'
// => val ch: char = 'A'

Strings são uma sequência de chars.

Um char individual pode ser obtido de uma string com indexação (a partir do zero):

"Exercism"[4] //  =>  'c'

Iterar sobre uma string retorna um char a cada passo.

O próximo exemplo usa uma função de ordem superior e uma função anônima, por conveniência. Elas serão abordadas direito mais adiante no programa de estudos, mas por enquanto são, na prática, uma forma concisa de escrever um laço sobre os caracteres de uma string.

Seq.map (fun c -> c, int c) "F#"  //  =>  [('F', 70); ('#', 35)]

Como mostrado acima, um char pode ser convertido para seu valor int. Isso também funciona (pelo menos algumas vezes) para outros sistemas de escrita:

Seq.map (fun c -> c, int c) "東京"  //  =>  [('東', 26481); ('京', 20140)]

O Int16 subjacente é usado ao comparar caracteres:

'A' < 'D'  // =>  true

Além disso, um int pode ser convertido para char:

char 77  // => 'M'

A biblioteca System.Char contém o conjunto completo de métodos esperados para uma linguagem .NET, como conversões para maiúsculas/minúsculas:

'a' |> System.Char.ToUpper  // =>  'A'

'Q' |> System.Char.ToLower  // =>  'q'

Instruções

Neste exercício, você vai implementar um conjunto parcial de rotinas utilitárias para ajudar quem desenvolve a limpar nomes de identificadores.

Nas 6 tarefas, você vai construir aos poucos as funções transform, para converter caracteres individuais, e clean, para converter strings.

Um identificador válido é composto por zero ou mais letras, sublinhados, hífens, pontos de interrogação e emojis.

Se uma string vazia for passada para a função clean, uma string vazia deve ser retornada.

1. Substitua todos os hífens por sublinhados

Implemente a função transform para substituir todos os hífens por sublinhados.

transform '-'  // => "_"

2. Remova todos os espaços em branco

Remova todos os caracteres de espaço em branco. Isso inclui espaços em branco no início e no fim.

transform ' '  // => ""

3. Converta camelCase para kebab-case

Modifique a função transform para converter camelCase em kebab-case

transform 'D'  // => "-d"

4. Omita caracteres que são dígitos

Modifique a função transform para omitir qualquer caractere que seja numérico.

transform '7'  // => ""

5. Substitua letras gregas minúsculas por pontos de interrogação

Modifique a função transform para substituir qualquer letra grega no intervalo de 'α' a 'ω'.

transform 'β' // => "?"

6. Combine essas operações para atuar sobre uma string

Implemente a função clean para aplicar essas operações a uma string inteira.

Caracteres que ficam fora das regras devem passar sem alteração.

clean "  a2b Cd-ω😀  " //  => "ab-cd_?😀"

Montando uma string a partir de caracteres

Este tópico será abordado em detalhes mais adiante no programa de estudos.

Por enquanto, pode ser útil saber que existe uma função de ordem superior chamada String.collect que converte uma coleção de chars em uma string, usando uma função que você fornece.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
Editar via GitHub O link abre em uma nova janela ou aba
F# Exercism

Tudo pronto para começar Limpinho?

Crie sua conta no Exercism para aprender e dominar F# com 18 conceitos148 exercícios e mentoria humana de verdade, tudo de graça.