Log-Level

Log-Level

Lernübung

Einführung

Strings

In Common Lisp sind Strings Vektoren aus Zeichen. Sie werden als Zeichen in doppelten Anführungszeichen geschrieben (z. B. "Hello World!").

Das Prädikat stringp gibt nur dann wahr zurück, wenn der übergebene Wert ein String ist.

Strings lassen sich mit der Funktion subseq in Teilstrings zerlegen. Diese nimmt den String, einen Startindex und optional einen Endindex entgegen. Die Indizierung ist nullbasiert.

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

Strings lassen sich mit string= auf Gleichheit vergleichen. Wenn die Groß- und Kleinschreibung der Zeichen ignoriert werden soll, kannst du string-equal verwenden.

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

Mit string-upcase, string-downcase und string-capitalize kannst du Strings in Großbuchstaben, in Kleinbuchstaben oder in großgeschriebene Wörter umwandeln.

(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"

Anleitung

In dieser Übung schreibst du Code, der Larry, dem Lisp-Alien, dabei hilft, Log-Strings zu parsen und zu formatieren. Diese Log-Strings kommen aus verschiedenen Systemen und müssen verarbeitet werden, damit ihre Meldungen auf einer informativen Überwachungsanzeige dargestellt werden können.

Log-Strings haben die Form "[<level>]: <message>". Das Level ist einer der folgenden Werte: info, warn oder ohno.

1. Die Meldung extrahieren

Definiere eine Funktion log-message, die einen Log-String entgegennimmt und zur darin enthaltenen Meldung auswertet.

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

2. Den Schweregrad bestimmen

Das Level des Log-Strings bestimmt seinen Schweregrad.

  • Ein Level von info bedeutet einen Schweregrad von :everything-ok
  • Ein Level von warn bedeutet einen Schweregrad von :getting-worried
  • Ein Level von ohno bedeutet einen Schweregrad von :run-for-cover

Definiere eine Funktion log-severity, die einen Log-String entgegennimmt und zum richtigen Schweregrad auswertet.

(log-severity "[warn]: might want to get that checked") ; => :getting-worried

3. Der Umgang mit den Launen der Realität

Leider sind die Log-Strings manchmal nicht korrekt formatiert. Genauer gesagt ist das Log-Level nicht immer komplett kleingeschrieben, wie oben angegeben. Passe log-severity an, um damit umzugehen.

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

4. Die Log-Meldung je nach Schweregrad neu formatieren

Je nach Schweregrad wird die Meldung auf unterschiedliche Weise verändert:

  • Bei einem Schweregrad von :everything-ok wird die Meldung komplett in Kleinbuchstaben geschrieben.
  • Bei einem Schweregrad von :getting-worried wird in der Meldung jedes Wort großgeschrieben.
  • Bei einem Schweregrad von :run-for-cover wird die Meldung komplett in Großbuchstaben geschrieben.

Definiere eine Funktion log-format, die eine Log-Meldung entgegennimmt und zu einer korrekt formatierten Meldung auswertet.

(log-format "[ohno]: whoops!") ; => WHOOPS!
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Common Lisp Exercism

Bereit, mit Log-Level zu starten?

Melde dich bei Exercism an, um Common Lisp mit 27 Konzepte92 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.