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"
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.
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 severidad.
info significa una severidad de :everything-ok
warn significa una severidad de :getting-worried
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
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
Según la severidad, el mensaje se debe modificar de distintas maneras:
:everything-ok debe cambiar su mensaje a todo en minúsculas.:getting-worried debe cambiar su mensaje para que cada palabra empiece con mayúscula.: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!
Regístrate en Exercism para aprender y dominar Common Lisp con 27 conceptos92 ejercicios y mentoría humana real, todo gratis.