سطح‌های لاگ

سطح‌های لاگ

تمرین یادگیری

مقدمه

رشته

در 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.