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