Los charlists se crean mediante el sigilo ~c.
~c"hello"
Ten en cuenta que en versiones anteriores de Elixir, los charlists se representan como 'hello' con comillas simples.
Aunque se parecen mucho a los strings, estos dos tipos de datos son bastante diferentes entre sí. Un charlist es una lista de enteros. Los enteros representan los valores Unicode de un carácter dado, también conocidos como puntos de código.
[65, 66, 67]
# => ~c"ABC"
Puedes anteponer ? a un carácter para obtener su punto de código.
?A
# => 65
[?:, ?)]
# => ~c":)"
Como los charlists son listas, puedes trabajar con ellos igual que con cualquier otra lista: mediante recursión y coincidencia de patrones.
[first_letter | _] = ~c"cat"
first_letter
# => 99
Puedes concatenar dos listas con ++.
~c"hi" ++ ~c"!"
# => ~c"hi!"
Cuanto más larga sea la primera lista, más lenta será la concatenación, así que evita añadir elementos repetidamente a listas de longitud arbitraria.
case es una estructura de control de flujo que nos permite comparar un valor dado con muchos patrones. Las cláusulas de una expresión case se evalúan de arriba abajo, hasta que se encuentra una coincidencia.
age = 15
case age do
0 -> ~c"infant"
age when age < 4 -> ~c"baby"
age when age < 13 -> ~c"child"
age when age < 18 -> ~c"teenager"
_ -> ~c"adult"
end
# => ~c"teenager"
Trabajas como administrador de sistemas en una gran empresa de Múnich, Alemania. Una de tus responsabilidades es gestionar las cuentas de correo electrónico.
Has estado escuchando las quejas de personas que dicen que no pueden escribir correos al señor Müller. Pronto te das cuenta de que la mayoría de la empresa usa un cliente de correo antiguo que no reconoce müller@firma.de como una dirección de correo válida debido al carácter no ASCII.
Decirle a la gente que abandone su viejo cliente de correo favorito es una batalla perdida, así que decides crear alias saneados para todas las cuentas de correo.
Implementa la función sanitize/1. Debe aceptar un nombre de usuario como charlist y devolver el nombre de usuario con todos los caracteres excepto las letras minúsculas eliminados.
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
Amplía la función sanitize/1. No debe eliminar los guiones bajos del nombre de usuario.
Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"
Hay 4 caracteres no ASCII en el alfabeto alemán, y todos ellos tienen sustitutos ASCII comúnmente reconocidos.
| Carácter alemán | Sustituto ASCII |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
Amplía la función sanitize/1. Debe sustituir los caracteres alemanes según la tabla. Puedes asumir sin problema que todos los nombres de usuario ya están en minúsculas.
Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.