Las charlists se crean con el sigilo ~c.
~c"hello"
Ten en cuenta que en versiones anteriores de Elixir, las charlists se representan como 'hello' con comillas simples.
Aunque se parecen mucho a los strings, los dos tipos de datos son bastante diferentes entre sí. Una charlist es una lista de enteros. Los enteros representan los valores Unicode de un carácter determinado, 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 las charlists son listas, puedes trabajar con ellas igual que con cualquier otra lista: usando 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 agregar elementos repetidamente a listas de longitud arbitraria.
case es una estructura de control de flujo que nos permite comparar un valor dado contra muchos patrones. Las cláusulas de una expresión case se evalúan de arriba hacia 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 para una gran empresa en Múnich, Alemania. Una de tus responsabilidades es gestionar cuentas de correo electrónico.
Has estado escuchando quejas de personas que dicen que no pueden enviar correos al Sr. Müller. Rápidamente te das cuenta de que la mayoría de la empresa usa un cliente de correo electrónico 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 antiguo 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 eliminados excepto las letras minúsculas.
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
Extiende 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 tienen sustitutos ASCII comúnmente reconocidos.
| Carácter alemán | Sustituto ASCII |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
Extiende 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.