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 ; একাধিক ঘোষণা করে।
হাইডি একজন তরুণ ফোর্থ এলিয়েন। তার মানব বর্ণমালা প্রকল্পের কিছু কাজ বাকি, তাই সে জিজ্ঞেস করে আপনি কি তার দরকার হবে এমন কিছু শব্দ প্রোগ্রাম করতে তাকে সাহায্য করতে পারবেন।
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
হাইডিকে জানতে হবে একটি ক্যারেক্টার "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
হাইডিকে মাঝে মাঝে একটি ক্যারেক্টারকে ভিন্ন আকারে বদলাতে হয়। 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)
হাইডিকে আরও জানতে হবে এটি কী ধরনের ক্যারেক্টার। 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
Exercism-এ সাইন আপ করুন, Factor ট্র্যাকের 47টি কনসেপ্ট163টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।