লগ লেভেল

লগ লেভেল

লার্নিং অনুশীলনী

ভূমিকা

স্ট্রিং

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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।