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

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

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

ভূমিকা

Factor-এর ক্যারেক্টার হলো ইন্টিজার, অর্থাৎ Unicode কোড পয়েন্ট। তাই সংখ্যাগত <, >, = তুলনা সরাসরি কেস-সেনসিটিভ ক্রম দেয়। unicode ভোকাবুলারি এতে যোগ করে Unicode-সচেতন প্রেডিকেট আর একক-ক্যারেক্টারের কেস কনভার্সন।

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

LETTER?  ( c -- ? )    ! uppercase letter
letter?  ( c -- ? )    ! lowercase letter
Letter?  ( c -- ? )    ! letter, either case
digit?   ( c -- ? )    ! decimal digit
digit>   ( c -- n )    ! the integer value of a digit char
blank?   ( c -- ? )    ! whitespace
USING: unicode ;

CHAR: A LETTER? .    ! => t
CHAR: a letter? .    ! => t
CHAR: 7 digit?  .    ! => t
CHAR: 7 digit>  .    ! => 7

কেস কনভার্সন

ch>upper আর ch>lower একটি ক্যারেক্টারের কেস উল্টে দেয়। আর স্ট্রিং-স্তরের >upper ও >lower এগুলো একটি স্ট্রিংয়ের প্রতিটি ক্যারেক্টারে প্রয়োগ করে।

CHAR: a ch>upper .   ! => 65   (which is CHAR: A)
"Hello" >upper .     ! => "HELLO"

capitalize পুরো একটি স্ট্রিংকে ছোট হাতের অক্ষরে নামিয়ে আনে, তারপর তার প্রথম ক্যারেক্টারটিকে বড় হাতের অক্ষরে তোলে। এটি একটি একক শব্দের টাইটেল কেস:

"hELLO" capitalize .   ! => "Hello"

ক্যারেক্টার লিটারাল

CHAR: A পার্স করে A-এর ইন্টিজার কোড পয়েন্ট দেয়। নামযুক্ত ক্যারেক্টারের জন্য space, tab, \n ইত্যাদি নাম ব্যবহার করুন:

CHAR: A .        ! => 65
CHAR: space .    ! => 32
CHAR: \n .       ! => 10

সিম্বল

যখন কোনো ওয়ার্ডকে মানের বদলে একটি ট্যাগ রিটার্ন করতে হয়, যেমন বুলিয়ানের বদলে yes/no/maybe, তখন প্রতিটি ট্যাগকে সিম্বল হিসেবে ঘোষণা করুন। সিম্বল হলো এমন একটি ওয়ার্ড, যা কল করা হলে নিজেকেই স্ট্যাকে তোলে, আর দুটি সিম্বল তখনই সমান হয় যখন তাদের নাম একই হয়।

USING: kernel ;

SYMBOLS: yes no maybe ;

yes .    ! => yes
yes yes = .    ! => t
yes no = .     ! => f

SYMBOL: name একটি ঘোষণা করে; SYMBOLS: a b c ; একাধিক ঘোষণা করে।

নির্দেশনা

হাইডি একজন তরুণ ফোর্থ এলিয়েন। তার মানব বর্ণমালা প্রকল্পের কিছু কাজ বাকি, তাই সে জিজ্ঞেস করে আপনি কি তার দরকার হবে এমন কিছু শব্দ প্রোগ্রাম করতে তাকে সাহায্য করতে পারবেন।

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

compare-chars ডিফাইন করুন যাতে এটি দুটি ক্যারেক্টার নেয় এবং প্রথমটি দ্বিতীয়টির চেয়ে ছোট, বড়, নাকি সমান তার উপর নির্ভর করে less, greater, বা equal প্রতীকটি রিটার্ন করে। তুলনা করুন কেস-সেনসিটিভ ভাবে।

CHAR: A CHAR: B compare-chars .   ! => less
CHAR: B CHAR: A compare-chars .   ! => greater
CHAR: A CHAR: A compare-chars .   ! => equal
CHAR: A CHAR: a compare-chars .   ! => less

2. একটি ক্যারেক্টারের আকার নির্ধারণ করুন

হাইডিকে জানতে হবে একটি ক্যারেক্টার "big" (আপারকেস), "small" (লোয়ারকেস), নাকি কোনো আকার নেই। size-of-char ডিফাইন করুন যাতে এটি big, small, বা no-size রিটার্ন করে।

CHAR: A size-of-char .       ! => big
CHAR: a size-of-char .       ! => small
CHAR: 5 size-of-char .       ! => no-size
CHAR: space size-of-char .   ! => no-size

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

হাইডিকে মাঝে মাঝে একটি ক্যারেক্টারকে ভিন্ন আকারে বদলাতে হয়। change-size-of-char ডিফাইন করুন যাতে এটি একটি ক্যারেক্টার এবং কাঙ্ক্ষিত আকার (big বা small) নেয় এবং সংশ্লিষ্ট কেসের ক্যারেক্টার রিটার্ন করে।

CHAR: a big change-size-of-char .     ! => 65   (CHAR: A)
CHAR: A small change-size-of-char .   ! => 97   (CHAR: a)

4. একটি ক্যারেক্টারের ধরন নির্ধারণ করুন

হাইডিকে আরও জানতে হবে এটি কী ধরনের ক্যারেক্টার। type-of-char ডিফাইন করুন যাতে এটি রিটার্ন করে:

  • alpha যেকোনো অক্ষরের জন্য (বড় বা ছোট)
  • numeric একটি দশমিক অঙ্কের জন্য
  • space স্পেস ক্যারেক্টারের জন্য
  • newline নিউলাইন ক্যারেক্টারের জন্য
  • unknown বাকি সব ক্ষেত্রে
CHAR: A type-of-char .       ! => alpha
CHAR: 5 type-of-char .       ! => numeric
CHAR: space type-of-char .   ! => space
CHAR: \n type-of-char .      ! => newline
CHAR: ! type-of-char .       ! => unknown
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Factor Exercism

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

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