ট্র্যাক
/
Common Lisp
Common Lisp
/
অনুশীলনী
/
ক্যারেক্টার স্টাডি
ক্যারেক্টার স্টাডি

ক্যারেক্টার স্টাডি

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

ভূমিকা

ক্যারেক্টার

অন্য প্রোগ্রামিং ভাষার মতো Common Lisp-এও ক্যারেক্টার আছে। ক্যারেক্টার হলো এমন অবজেক্ট, যা টেক্সটের (যেমন একটি স্ট্রিং বা টেক্সট স্ট্রিম) মধ্যে থাকা একটি একক বোঝায়।

ক্যারেক্টারকে ইন্টিজারে এবং ইন্টিজার থেকে রূপান্তর করা যায়। (কিন্তু ওগুলো ইন্টিজার নয়, ওগুলো আলাদা একটি টাইপ।)

ক্যারেক্টারকে #\ দিয়ে শুরু করে তার নাম লিখে প্রকাশ করা হয়। কমন ক্যারেক্টার যেমন 'A' বা 'b' বা '9' বা '!' এর 'নাম' হলো ঠিক সেটাই: তাই #\A, #\b, #\9 আর #\!। কিছু নন-গ্রাফিক্যাল ক্যারেক্টার, যেমন স্পেস বা নিউলাইন, এর নাম হয় #\Space ও #\Newline এর মতো।

স্ট্যান্ডার্ড অনুযায়ী একটি ইমপ্লিমেন্টেশনে শুধু ৯৬টি ক্যারেক্টার থাকলেই চলে (বড় ও ছোট হাতের লাতিন বর্ণ (A-Za-z), অঙ্ক (0-9), স্পেস (#\Space), নিউলাইন (#\Newline) এবং যতিচিহ্ন (যেমন !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~))। তবে বেশিরভাগ ইমপ্লিমেন্টেশন এর চেয়ে বেশি ক্যারেক্টার দেয়, এমনকি এমন ইমপ্লিমেন্টেশনও আছে যেগুলো সব ইউনিকোড ক্যারেক্টার দেয়।

ক্যারেক্টার তুলনা

ক্যারেক্টার সমতা যাচাইয়ের জন্য char= বা char-equal দিয়ে তুলনা করা যায় (পরেরটি কেস-সংবেদনশীল নয়)।

char<, char>, char<=, char>= এবং এগুলোর কেস-সংবেদনশীল নয় এমন সংস্করণ char-lessp ও char-greaterp এর মতো ফাংশন দিয়ে ক্যারেক্টারকে সাজানো যায়।

ক্যারেক্টারের ধরন

ক্যারেক্টারকে বিভিন্ন টাইপে ভাগ করা যায়: গ্রাফিক্যাল, অ্যালফাবেটিক, আলফা-নিউমেরিক, ডিজিট, আপার-কেস বা লোয়ার-কেস। একটি ক্যারেক্টার একাধিক টাইপের হতে পারে, যেমন একটি আপার-কেস অ্যালফাবেটিক ক্যারেক্টার। এই প্রতিটি টাইপের জন্য প্রেডিকেট আছে: graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p ও lower-case-p।

ক্যারেক্টারের কেস রূপান্তর

কিছু ক্যারেক্টার আপার বা লোয়ার কেস হতে পারে এবং char-upcase ও char-downcase দিয়ে এদের মধ্যে রূপান্তর করা যায়।

নির্দেশনা

Lewis, একজন তরুণ Lisp Alien, তাদের মানব বর্ণমালা প্রকল্পের কিছু কাজ শেষ করতে চায় এবং তাদের প্রয়োজন হবে এমন কিছু ফাংশন প্রোগ্রাম করতে আপনি তাদের সাহায্য করতে পারবেন কি না জিজ্ঞেস করে।

1. ক্যারেক্টার তুলনা করা

দুটি ক্যারেক্টার তুলনা করার জন্য Lewis-এর একটি ফাংশন দরকার হবে, যেটি নির্ণয় করবে প্রথমটি দ্বিতীয়টির চেয়ে বড়, ছোট, নাকি সমান। compare-chars নামে একটি ফাংশন লিখুন, যেটি দুটি ক্যারেক্টার নেবে এবং যথাযথভাবে :greater-than, :less-than বা :equal-to ইভ্যালুয়েট করবে। ফাংশনটি কেস-সেনসিটিভ পদ্ধতিতে তুলনা করবে।

2. ক্যারেক্টারের "আকার" নির্ণয় করা

কোনো ক্যারেক্টার "বড়" (বড় হাতের অক্ষর), "ছোট" (ছোট হাতের অক্ষর), নাকি এর কোনোটিই নয় অর্থাৎ "কোনো আকার নেই", তা Lewis-এর জানা দরকার। ক্যারেক্টারটির "আকার" অনুযায়ী :big, :small বা :no-size ইভ্যালুয়েট করবে এমন একটি ফাংশন size-of-char নামে লিখুন:

3. ক্যারেক্টারের "আকার" পরিবর্তন করা

Lewis-কে কখনো একটি বড় ক্যারেক্টার ছোট করতে হতে পারে, আবার ছোট ক্যারেক্টার বড়ও করতে হতে পারে। change-size-of-char নামে একটি ফাংশন লিখুন, যেটি দুটি প্যারামিটার নেয়: একটি ক্যারেক্টার এবং একটি কাঙ্ক্ষিত আকার (:big বা :small)। এটি সঠিক আকারের সংশ্লিষ্ট ক্যারেক্টার ইভ্যালুয়েট করবে।

4. ক্যারেক্টারের "টাইপ" নির্ণয় করা

Lewis-কে কেবল ক্যারেক্টারটির 'আকার'ই জানতে হবে না, তার 'টাইপ'ও জানতে হবে। type-of-char নামে একটি ফাংশন লিখুন, যেটি ক্যারেক্টারটি বর্ণমালার অক্ষর হলে :alpha, সংখ্যাসূচক ক্যারেক্টার হলে :numeric, স্পেস ক্যারেক্টার হলে :space, নিউলাইন ক্যারেক্টার হলে :newline এবং অন্যথায় :unknown ইভ্যালুয়েট করবে।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Common Lisp Exercism

ক্যারেক্টার স্টাডি শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Common Lisp ট্র্যাকের 27টি কনসেপ্ট92টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।