Limpinho

Limpinho

Exercício de aprendizagem

Introdução

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

Os chars podem ser definidos como literais com plicas:

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

Uma string é uma sequência de chars.

Podes obter um char individual de uma string com indexação (a começar em zero):

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

Iterar sobre uma string devolve um char a cada passo.

O exemplo seguinte usa uma função de ordem superior e uma função anónima, por conveniência. Estes conceitos serão abordados como deve ser mais à frente no programa, mas por agora são essencialmente uma forma concisa de escrever um ciclo sobre os carateres de uma string.

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

Como mostrado acima, um char pode ser convertido no seu valor int. Isto 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 carateres:

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

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

char 77  // => 'M'

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

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

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

Instruções

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

Ao longo das 6 tarefas vais construir gradualmente as funções transform, para converter carateres individuais, e clean, para converter strings.

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

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

1. Substitui todos os hífenes encontrados por underscores

Implementa a função transform para substituir todos os hífenes por underscores.

transform '-'  // => "_"

2. Remove todos os espaços em branco

Remove todos os carateres de espaço em branco. Isto inclui os espaços em branco no início e no fim.

transform ' '  // => ""

3. Converte camelCase em kebab-case

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

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

4. Omite os carateres que são algarismos

Modifica a função transform para omitir os carateres numéricos.

transform '7'  // => ""

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

Modifica a função transform para substituir todas as letras gregas no intervalo de 'α' a 'ω'.

transform 'β' // => "?"

6. Combina estas operações para atuar sobre uma string

Implementa a função clean para aplicar estas operações a uma string completa.

Os carateres que ficam fora das regras devem passar sem alterações.

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

Construir uma string a partir de carateres

Este tópico será abordado em detalhe mais à frente no currículo.

Por agora, pode ser útil saberes que existe uma função de ordem superior chamada String.collect que converte uma coleção de chars numa string, usando uma função que tu forneces.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
Editar via GitHub A ligação abre numa nova janela ou separador
F# Exercism

Estás pronto para começar Limpinho?

Inscreve-te no Exercism para aprenderes e dominares F# com 18 conceitos148 exercícios, e mentoria humana real, tudo grátis.