Rutas
/
Common Lisp
Common Lisp
/
Ejercicios
/
Niveles de registro
Niveles de registro

Niveles de registro

Ejercicio de aprendizaje

Introducción

Cadenas de caracteres

En Common Lisp, las cadenas de caracteres son vectores de caracteres. Se escriben como caracteres rodeados de comillas dobles (p. ej. «Hello World!»).

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

Los strings se pueden dividir en partes más pequeñas con la función subseq, que recibe un string, un índice de inicio y, opcionalmente, un índice de fin. Los índices comienzan en cero.

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

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

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

Las operaciones como convertir a mayúsculas, convertir a minúsculas y capitalizar un string se pueden realizar 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 código para ayudar a Larry the Lisp Alien a analizar y dar formato a strings de log. Estos strings de log llegan desde distintos sistemas y hay que procesarlos para que sus mensajes se puedan mostrar en un panel de monitorización informativo.

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 gravedad

El nivel del string de log determina su gravedad.

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

Define una función log-severity que tome un string de log y devuelva la gravedad 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 siempre tienen el formato correcto. En concreto, puede que el nivel de log no esté todo en minúsculas como se especifica más arriba. Modifica log-severity para que lo tenga en cuenta.

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

4. Dar formato al mensaje de log según la gravedad

Según la gravedad, el mensaje debe modificarse de distintas formas:

  • una gravedad de :everything-ok debe hacer que su mensaje pase a estar todo en minúsculas.
  • una gravedad de :getting-worried debe hacer que cada palabra de su mensaje empiece por mayúscula.
  • una gravedad de :run-for-cover debe hacer que su mensaje pase a estar todo en mayúsculas.

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

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

¿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.