Parcours
/
Common Lisp
Common Lisp
/
Exercices
/
Les niveaux de log
Les niveaux de log

Les niveaux de log

Exercice d'apprentissage

Introduction

Les strings

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"

Instructions

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.

1. Extrais le message

Définis une fonction log-message qui prend une string de log et renvoie le message qu'elle contient.

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

2. Détermine la sévérité

Le niveau de la string de log détermine sa sévérité.

  • un niveau info correspond à une sévérité :everything-ok
  • un niveau warn correspond à une sévérité :getting-worried
  • un niveau 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

3. Fais face aux aléas de la réalité

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

4. Reformate le message de log selon la sévérité

Selon la sévérité, le message doit être modifié de différentes manières :

  • une sévérité :everything-ok : le message doit être mis en minuscules.
  • une sévérité :getting-worried : chaque mot du message doit commencer par une majuscule.
  • une sévérité :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!
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Common Lisp Exercism

Prêt à commencer Les niveaux de log ?

Inscris-toi sur Exercism pour apprendre et maîtriser Common Lisp avec 27 concepts92 exercices, et un vrai mentorat humain, le tout gratuitement.