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"
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.
Definiere eine Funktion log-message, die einen Log-String entgegennimmt und zur darin enthaltenen Meldung auswertet.
(log-message "[ohno]: whoops!") ; => "whoops!"
Das Level des Log-Strings bestimmt seinen Schweregrad.
info bedeutet einen Schweregrad von :everything-ok
warn bedeutet einen Schweregrad von :getting-worried
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
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
Je nach Schweregrad wird die Meldung auf unterschiedliche Weise verändert:
:everything-ok wird die Meldung komplett in Kleinbuchstaben geschrieben.:getting-worried wird in der Meldung jedes Wort großgeschrieben.: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!
Melde dich bei Exercism an, um Common Lisp mit 27 Konzepte92 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.