المسارات
/
Common Lisp
Common Lisp
/
التمارين
/
مستويات السجل
مستويات السجل

مستويات السجل

تمرين تعلّمي

مقدمة

السلاسل النصية

في 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.

1. استخراج الرسالة

عرّف دالة log-message تأخذ سلسلة سجل وتُقيّم إلى الرسالة التي تحتويها.

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

2. تحديد درجة الخطورة

يحدد مستوى سلسلة السجل درجة خطورتها.

  • مستوى info يعني درجة الخطورة :everything-ok
  • مستوى warn يعني درجة الخطورة :getting-worried
  • مستوى ohno يعني درجة الخطورة :run-for-cover

عرّف دالة log-severity تأخذ سلسلة سجل وتُقيّم إلى درجة الخطورة الصحيحة.

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

3. التعامل مع تقلّبات الواقع

لسوء الحظ، لا تكون سلاسل السجل منسّقة تنسيقًا صحيحًا دائمًا. وتحديدًا، قد لا يكون مستوى السجل بأحرف صغيرة كلها كما هو موضح أعلاه. عدّل log-severity للتعامل مع هذا.

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

4. إعادة تنسيق رسالة السجل وفقًا لدرجة خطورة السجل

تبعًا لدرجة الخطورة، ينبغي تعديل الرسالة بطرق مختلفة:

  • درجة الخطورة :everything-ok ينبغي أن تتحول رسالتها إلى أحرف صغيرة كلها.
  • درجة الخطورة :getting-worried ينبغي أن تتحول رسالتها بحيث تبدأ كل كلمة فيها بحرف كبير.
  • درجة الخطورة :run-for-cover ينبغي أن تتحول رسالتها إلى أحرف كبيرة كلها.

عرّف دالة log-format تأخذ رسالة سجل وتُقيّم إلى رسالة منسّقة تنسيقًا صحيحًا.

(log-format "[ohno]: whoops!") ; => WHOOPS!
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Common Lisp Exercism

مستعد لبدء مستويات السجل؟

سجّل في Exercism لتتعلّم وتتقن Common Lisp عبر 27 مفهومًا92 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.