Tracks
/
Common Lisp
Common Lisp
/
Ejercicios
/
Niveles de registro
Niveles de registro

Niveles de registro

Ejercicio de aprendizaje

Introducción

Strings

En Common Lisp, los strings son vectores de caracteres. Se escriben como caracteres rodeados de comillas dobles (por ejemplo, "Hello World!").

El predicado stringp devolverá verdadero solo si el valor dado es un string.

Los strings se pueden dividir en subcadenas con la función subseq, que recibe el string, un índice de inicio y, opcionalmente, un índice final. La indexación empieza en cero.

(subseq "Hello World" 1 5)   ; => "ello"
(subseq "skip to the end" 5) ; => "to the end"

Los strings se pueden comparar para ver si son iguales con string=. Si se deben ignorar las mayúsculas y minúsculas de los caracteres, puedes usar string-equal.

(string= "macaroni" "macaroni")      ; => T
(string= "macaroni" "MACARONI")      ; => NIL
(string-equal "macaroni" "MACARONI") ; => T

Operaciones como convertir a mayúsculas, convertir a minúsculas y capitalizar strings se pueden hacer con string-upcase string-downcase y string-capitalize.

(string-upcase "not too loud")                ; => "NOT TOO LOUD"
(string-downcase "YELL IT FROM THE ROOFTOPS") ; => "yell it from the rooftops"
(string-capitalize "practical COMMON LiSP")   ; => "Practical Common Lisp"

Instrucciones

En este ejercicio vas a escribir algo de código para ayudar a Larry the Lisp Alien a analizar y formatear strings de log. Estos strings de log llegan desde distintos sistemas y hay que procesarlos para que sus mensajes se puedan mostrar en una pantalla informativa de monitoreo.

Los strings de log tienen el formato "[<level>]: <message>". El nivel será uno de los siguientes valores: info, warn u ohno.

1. Extraer el mensaje

Define una función log-message que tome un string de log y devuelva el mensaje que contiene.

(log-message "[ohno]: whoops!") ; => "whoops!"

2. Determinar la severidad

El nivel del string de log determina su severidad.

  • un nivel de info significa una severidad de :everything-ok
  • un nivel de warn significa una severidad de :getting-worried
  • un nivel de ohno significa una severidad de :run-for-cover

Define una función log-severity que tome un string de log y devuelva la severidad correcta.

(log-severity "[warn]: might want to get that checked") ; => :getting-worried

3. Lidiar con los caprichos de la realidad

Por desgracia, a veces los strings de log no están formateados correctamente. En concreto, puede que el nivel del log no esté todo en minúsculas como se indicó antes. Modifica log-severity para que se ocupe de esto.

(log-severity "[WaRn]: string case system failing") ; => :getting-worried

4. Reformatear el mensaje de log según la severidad

Según la severidad, el mensaje se debe modificar de distintas maneras:

  • una severidad de :everything-ok debe cambiar su mensaje a todo en minúsculas.
  • una severidad de :getting-worried debe cambiar su mensaje para que cada palabra empiece con mayúscula.
  • una severidad de :run-for-cover debe cambiar su mensaje a todo en mayúsculas.

Define una función log-format que tome un mensaje de log y devuelva un mensaje con el formato correcto.

(log-format "[ohno]: whoops!") ; => WHOOPS!
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Common Lisp Exercism

¿Todo listo para empezar Niveles de registro?

Regístrate en Exercism para aprender y dominar Common Lisp con 27 conceptos92 ejercicios y mentoría humana real, todo gratis.