في 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.