Factor-এ স্বাগতম! Factor একটি কনক্যাটেনেটিভ ভাষা: square(add(2, 3))-এর মতো ফাংশন কল করার বদলে আপনি বাম থেকে ডানে ওয়ার্ড-এর একটি সারি লেখেন, যেমন 2 3 + square, যেগুলো একটি শেয়ার করা ডেটা স্ট্যাক দিয়ে একে অন্যের কাছে মান পাঠায়। ভাবুন তো, একটি ঘাটে মালবাহী ক্রেটের স্তূপ, যার একেবারে উপরে সবচেয়ে নতুনটি।
একটি লাইন কমেন্ট শুরু হয় ! দিয়ে। ! থেকে লাইনের শেষ পর্যন্ত সবকিছু Factor উপেক্ষা করে। নিচের উদাহরণগুলোতে ! দিয়ে বোঝানো হয়েছে কোডটি কী করে।
একটি লিটারাল লিখলেই সেটি স্ট্যাকের একেবারে উপরে পুশ হয়। কোড পড়া হয় বাম থেকে ডানে।
1 2 3 ! stack (bottom → top): 1 2 3
প্রতিটি ওয়ার্ড তার ইনপুট স্ট্যাকের উপরের অংশ থেকে পড়ে এবং তার আউটপুট আবার সেখানেই লেখে। . উপরের মানটি পপ করে প্রিন্ট করে; .s কিছুই খরচ না করে পুরো স্ট্যাক প্রিন্ট করে, যা দিয়ে কোনো কোড-টুকরো কী রেখে গেল তা দেখতে সুবিধা হয়।
প্রতিটি ওয়ার্ডের ডকুমেন্টেশনে থাকে ( inputs -- outputs ) আকারের একটি স্ট্যাক ইফেক্ট। এটি ওয়ার্ডের চুক্তি: ওয়ার্ডটি স্ট্যাকের উপরে থেকে ইনপুটগুলো পপ করে এবং তাদের জায়গায় আউটপুটগুলো রেখে দেয়। ভেতরের নামগুলো মানুষের জন্য ডকুমেন্টেশন, স্ট্যাক নিজে কিন্তু অবস্থানভিত্তিক, নামভিত্তিক নয়। স্ট্যাকের একেবারে উপরের মানটি হলো ডান দিকের নামটি।
: দিয়ে একটি ওয়ার্ডের ডেফিনিশন শুরু হয়, এরপর আসে স্ট্যাক ইফেক্ট, তারপর বডি, আর শেষে ; দিয়ে তা শেষ হয়। Factor-এর কম্পাইলার যাচাই করে যে বডিটি সত্যিই স্ট্যাক ইফেক্টে ঘোষণা করা জিনিসগুলো রেখে যায় কি না।
: restow ( a b -- b a ) swap ;
এই kernel ওয়ার্ডগুলো কোনো গণিত না করেই স্ট্যাকের উপরের অংশ সাজিয়ে দেয়, এগুলো শুধু ক্রেট এদিক-ওদিক সরায়:
dup ( x -- x x ) ! copy the top crate
drop ( x -- ) ! remove the top crate
swap ( x y -- y x ) ! flip the top two
over ( x y -- x y x ) ! copy the second crate onto the top
nip ( x y -- y ) ! remove the second crate
rot ( x y z -- y z x ) ! roll the third crate up to the top
একটি ক্রেট থেকে যখন দুটি ওয়ার্ডকে খাওয়াতে হবে তখন dup ব্যবহার করুন, ক্রেট ফেলে দিতে drop, উপরের দুটি ভুল ক্রমে থাকলে swap, নিচের ক্রেট নিয়ে কাজ করতে over বা nip, আর চাপা পড়ে থাকা ক্রেট উপরে তুলতে rot।
এর বড় পরিবার (-rot, dupd, swapd, 2dup, …) একই ধারণা অনুসরণ করে; ওই ওয়ার্ডগুলোর সাথে আপনি পরে পরিচিত হবেন।
সারি করে লেখা ওয়ার্ডগুলো বাম থেকে ডানে চলে: প্রতিটি ওয়ার্ড কাজ করে তার আগের ওয়ার্ডটি যে স্ট্যাক রেখে গেছে তার উপর। একবারে একটি ওয়ার্ড ধরে দেখুন, 1 2 স্ট্যাকের (নিচ → উপরে) উপর swap nip কী করে:
1 2 ! 1 2 the starting crates
swap ! 2 1 swap flipped the top two
nip ! 1 nip dropped the 2nd-from-top crate (the 2)
আর একই শুরুর ক্রেটগুলোর উপর dup rot, আবারও একবারে একটি ওয়ার্ড ধরে:
1 2 ! 1 2 the starting crates
dup ! 1 2 2 dup copied the top crate
rot ! 2 2 1 rot rolled the 3rd-from-top crate up to the top
ওয়ার্ডে ব্যবহার হয় lowercase-kebab-case: ছোট হাতের অক্ষরগুলো হাইফেন দিয়ে জোড়া।
আপনি ঘাটের ডেকের একজন কর্মী, কার্গো ক্রেটগুলো নতুন করে সাজাচ্ছেন। প্রতিটি টাস্ক একটিমাত্র ওয়ার্ড, যার ভেতরে কেবল শাফল ওয়ার্ড ব্যবহার করা হয়, কোনো পাটিগণিত নয়।
swap-crates ওয়ার্ডটি ডিফাইন করুন। এটি স্ট্যাক থেকে দুটি ক্রেট নামায় এবং উল্টো ক্রমে সেগুলো রেখে দেয়।
1 2 swap-crates .s
! 2
! 1
clear-spill ওয়ার্ডটি ডিফাইন করুন। এটি স্ট্যাক থেকে তিনটি ক্রেট নামায়, নিচের দুটি রেখে দেয় আর উপরেরটি ফেলে দেয়।
1 2 3 clear-spill .s
! 1
! 2
peek-under ওয়ার্ডটি ডিফাইন করুন। এটি স্ট্যাক থেকে দুটি ক্রেট নামায়, তারপর নিচের ক্রেটের একটি কপি উপরে বসিয়ে সেগুলো রেখে দেয়।
1 2 peek-under .s
! 1
! 2
! 1
tidy-deck ওয়ার্ডটি ডিফাইন করুন। এটি স্ট্যাক থেকে তিনটি ক্রেট নামায়, x y z ক্রমে, আর পিছনে রেখে দেয় z z y: নিচের ক্রেটটি ফেলে দিন, তারপর উপরের ক্রেটের দুটি কপি মাঝেরটির নিচে রেখে দিন।
1 2 3 tidy-deck .s
! 3
! 3
! 2
Exercism-এ সাইন আপ করুন, Factor ট্র্যাকের 47টি কনসেপ্ট163টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।