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"
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.
Define una función log-message que tome un string de log y devuelva el mensaje que contiene.
(log-message "[ohno]: whoops!") ; => "whoops!"
El nivel del string de log determina su gravedad.
info significa una gravedad de :everything-ok
warn significa una gravedad de :getting-worried
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
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
Según la gravedad, el mensaje debe modificarse de distintas formas:
:everything-ok debe hacer que su mensaje pase a estar todo en minúsculas.:getting-worried debe hacer que cada palabra de su mensaje empiece por mayúscula.: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!
Regístrate en Exercism para aprender y dominar Common Lisp con 27 conceptos92 ejercicios y mentoría humana real, todo gratis.