El tipo char de F# es un valor de 16 bits que representa los componentes direccionables más pequeños del texto, y es inmutable por defecto.
Los char se pueden definir como literales con comillas simples:
let ch = 'A'
// => val ch: char = 'A'
Los string son una secuencia de char.
Un char individual se puede obtener de un string con indexación (basada en cero):
"Exercism"[4] // => 'c'
Iterar sobre un string devuelve un char en cada paso.
El siguiente ejemplo usa una función de orden superior y una función anónima, por comodidad. Estas se cubrirán como es debido más adelante en el temario, pero por ahora son, en esencia, una forma concisa de escribir un bucle sobre los caracteres de un string.
Seq.map (fun c -> c, int c) "F#" // => [('F', 70); ('#', 35)]
Como se muestra arriba, un char se puede convertir a su valor int.
Esto también funciona (al menos algunas veces) para otros sistemas de escritura:
Seq.map (fun c -> c, int c) "東京" // => [('東', 26481); ('京', 20140)]
El Int16 subyacente se usa al comparar caracteres:
'A' < 'D' // => true
Además, un int se puede convertir a char:
char 77 // => 'M'
La biblioteca System.Char contiene el conjunto completo de métodos que se esperan de un lenguaje .NET, como las conversiones a mayúsculas/minúsculas:
'a' |> System.Char.ToUpper // => 'A'
'Q' |> System.Char.ToLower // => 'q'
En este ejercicio implementarás un conjunto parcial de rutinas auxiliares para ayudar a limpiar nombres de identificadores.
A lo largo de las 6 tareas irás construyendo poco a poco las funciones transform, para convertir caracteres individuales, y clean, para convertir strings.
Un identificador válido se compone de cero o más letras, guiones bajos, guiones, signos de interrogación y emojis.
Si se pasa un string vacío a la función clean, se debe devolver un string vacío.
Implementa la función transform para reemplazar los guiones por guiones bajos.
transform '-' // => "_"
Elimina todos los caracteres de espacio en blanco. Esto incluye los espacios en blanco al inicio y al final.
transform ' ' // => ""
Modifica la función transform para convertir camelCase a kebab-case.
transform 'D' // => "-d"
Modifica la función transform para omitir cualquier carácter que sea numérico.
transform '7' // => ""
Modifica la función transform para reemplazar cualquier letra griega en el rango de 'α' a 'ω'.
transform 'β' // => "?"
Implementa la función clean para aplicar estas operaciones a un string completo.
Los caracteres que quedan fuera de las reglas deben pasar sin cambios.
clean " a2b Cd-ω😀 " // => "ab-cd_?😀"
Este tema se tratará en detalle más adelante en el temario.
Por ahora, puede ser útil saber que existe una función de orden superior llamada String.collect que convierte una colección de chars en un string, usando una función que tú proporcionas.
let transform ch = $"{ch}_"
String.collect transform "abc" // => "a_b_c_"
Regístrate en Exercism para aprender y dominar F# con 18 conceptos148 ejercicios y mentoría humana real, todo gratis.