En Common Lisp, les strings sont des vecteurs de caractères. Une string s'écrit comme une suite de caractères entourée de guillemets doubles (par exemple "Hello World!").
Le prédicat stringp renvoie vrai uniquement si la valeur donnée est une string.
On peut découper une string en sous-strings avec la fonction subseq, qui prend la string, un indice de début et éventuellement un indice de fin.
Les indices commencent à zéro.
(subseq "Hello World" 1 5) ; => "ello"
(subseq "skip to the end" 5) ; => "to the end"
On peut comparer l'égalité de deux strings avec string=.
Si la casse des caractères doit être ignorée, on peut utiliser string-equal.
(string= "macaroni" "macaroni") ; => T
(string= "macaroni" "MACARONI") ; => NIL
(string-equal "macaroni" "MACARONI") ; => T
On peut mettre une string en majuscules, en minuscules ou capitaliser chacun de ses mots avec string-upcase, string-downcase et 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"
Dans cet exercice, tu vas écrire du code pour aider Larry the Lisp Alien à analyser et à formater des strings de log. Ces strings de log arrivent de systèmes divers et doivent être traitées pour que leurs messages puissent être affichés sur un écran de supervision informatif.
Les strings de log se présentent sous la forme "[<level>]: <message>". Le niveau est l'une des valeurs suivantes : info, warn ou ohno.
Définis une fonction log-message qui prend une string de log et renvoie le message qu'elle contient.
(log-message "[ohno]: whoops!") ; => "whoops!"
Le niveau de la string de log détermine sa sévérité.
info correspond à une sévérité :everything-ok
warn correspond à une sévérité :getting-worried
ohno correspond à une sévérité :run-for-cover
Définis une fonction log-severity qui prend une string de log et renvoie la sévérité correspondante.
(log-severity "[warn]: might want to get that checked") ; => :getting-worried
Malheureusement, il arrive que les strings de log ne soient pas toujours formatées correctement. En particulier, le niveau de log peut ne pas être entièrement en minuscules comme indiqué ci-dessus. Modifie log-severity pour gérer ce cas.
(log-severity "[WaRn]: string case system failing") ; => :getting-worried
Selon la sévérité, le message doit être modifié de différentes manières :
:everything-ok : le message doit être mis en minuscules.:getting-worried : chaque mot du message doit commencer par une majuscule.:run-for-cover : le message doit être mis en majuscules.Définis une fonction log-format qui prend un message de log et renvoie un message correctement formaté.
(log-format "[ohno]: whoops!") ; => WHOOPS!
Inscris-toi sur Exercism pour apprendre et maîtriser Common Lisp avec 27 concepts92 exercices, et un vrai mentorat humain, le tout gratuitement.