Στη Common Lisp οι συμβολοσειρές είναι διανύσματα χαρακτήρων. Γράφονται ως χαρακτήρες μέσα σε διπλά εισαγωγικά (π.χ. "Hello World!").
Το κατηγόρημα stringp θα επιστρέψει αληθή τιμή μόνο αν η τιμή που του δίνεται είναι συμβολοσειρά.
Οι συμβολοσειρές μπορούν να χωριστούν σε υποσυμβολοσειρές με τη συνάρτηση subseq, στην οποία δίνεις τη συμβολοσειρά, μια θέση έναρξης και προαιρετικά μια θέση λήξης.
Η αρίθμηση των θέσεων ξεκινά από το μηδέν.
(subseq "Hello World" 1 5) ; => "ello"
(subseq "skip to the end" 5) ; => "to the end"
Οι συμβολοσειρές μπορούν να συγκριθούν ως προς την ισότητα με το string=.
Αν θέλεις να αγνοηθεί η διάκριση πεζών και κεφαλαίων των χαρακτήρων, μπορείς να χρησιμοποιήσεις το string-equal.
(string= "macaroni" "macaroni") ; => T
(string= "macaroni" "MACARONI") ; => NIL
(string-equal "macaroni" "MACARONI") ; => T
Λειτουργίες όπως η μετατροπή μιας συμβολοσειράς σε κεφαλαία, σε πεζά και η κεφαλαιοποίησή της μπορούν να γίνουν με τις string-upcase, string-downcase και 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"
Σε αυτήν την άσκηση θα γράψεις κώδικα για να βοηθήσεις τον Larry the Lisp Alien να αναλύει και να μορφοποιεί συμβολοσειρές καταγραφής. Αυτές οι συμβολοσειρές καταγραφής έρχονται από διάφορα συστήματα και πρέπει να υποστούν επεξεργασία, ώστε τα μηνύματά τους να μπορούν να εμφανίζονται σε μια κατατοπιστική οθόνη παρακολούθησης.
Οι συμβολοσειρές καταγραφής έχουν τη μορφή "[<level>]: <message>". Το επίπεδο θα είναι μία από τις ακόλουθες τιμές: info, warn ή ohno.
Όρισε μια συνάρτηση log-message που θα παίρνει μια συμβολοσειρά καταγραφής και θα αξιολογείται στο μήνυμα που περιέχει.
(log-message "[ohno]: whoops!") ; => "whoops!"
Το επίπεδο της συμβολοσειράς καταγραφής καθορίζει τη σοβαρότητά της.
info σημαίνει σοβαρότητα :everything-ok
warn σημαίνει σοβαρότητα :getting-worried
ohno σημαίνει σοβαρότητα :run-for-cover
Όρισε μια συνάρτηση log-severity που θα παίρνει μια συμβολοσειρά καταγραφής και θα αξιολογείται στη σωστή σοβαρότητα.
(log-severity "[warn]: might want to get that checked") ; => :getting-worried
Δυστυχώς, μερικές φορές οι συμβολοσειρές καταγραφής δεν είναι πάντα σωστά μορφοποιημένες. Συγκεκριμένα, το επίπεδο καταγραφής μπορεί να μην είναι εξ ολοκλήρου πεζό, όπως ορίστηκε παραπάνω. Τροποποίησε τη log-severity ώστε να το χειρίζεται αυτό.
(log-severity "[WaRn]: string case system failing") ; => :getting-worried
Ανάλογα με τη σοβαρότητα, το μήνυμα πρέπει να τροποποιείται με διαφορετικούς τρόπους:
:everything-ok το μήνυμα πρέπει να αλλάζει ώστε να είναι όλο πεζό.:getting-worried το μήνυμα πρέπει να αλλάζει ώστε κάθε λέξη να αρχίζει με κεφαλαίο γράμμα.:run-for-cover το μήνυμα πρέπει να αλλάζει ώστε να είναι όλο κεφαλαία.Όρισε μια συνάρτηση log-format που παίρνει ένα μήνυμα καταγραφής και αξιολογείται σε ένα σωστά μορφοποιημένο μήνυμα.
(log-format "[ohno]: whoops!") ; => WHOOPS!
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Common Lisp με 27 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.