Haskell এর কোড স্ট্রাকচার এবং সিনট্যাক্স
Haskell একটি ফাংশনাল প্রোগ্রামিং ভাষা, এবং এর কোড স্ট্রাকচার ও সিনট্যাক্স কিছুটা আলাদা যা ফাংশনাল স্টাইলের প্রোগ্রামিংকে সহজ করে তোলে। Haskell-এর কোড সাধারণত ফাংশন, টাইপ এবং এক্সপ্রেশন নিয়ে গঠিত, এবং এতে পরিবর্তনযোগ্য ডেটা বা পার্শ্বপ্রতিক্রিয়া কম থাকে।
1. Haskell ফাইলের গঠন
Haskell ফাইলের এক্সটেনশন সাধারণত .hs হয়। একটি সাধারণ Haskell প্রোগ্রাম মূলত ফাংশন, মডিউল, এবং টাইপ ডিক্লারেশন নিয়ে গঠিত হয়। Haskell-এ কোড সাধারণত নিম্নোক্ত অংশগুলি নিয়ে গঠিত হয়:
- মডিউল ডিক্লারেশন: মডিউল কোডকে গোষ্ঠীবদ্ধ করে এবং বিভিন্ন ফাংশন ও ডেটা টাইপ সংজ্ঞা দেয়।
- ইম্পোর্ট স্টেটমেন্ট: অন্যান্য মডিউল থেকে ফাংশন এবং ডেটা টাইপ ইম্পোর্ট করা।
- ফাংশন ডেফিনিশন: বিভিন্ন কাজ সম্পন্ন করতে ফাংশন লেখা হয়।
- টাইপ ডিক্লারেশন: প্রতিটি ফাংশনের জন্য টাইপ নির্ধারণ করা যায়।
2. মডিউল ডিক্লারেশন
Haskell এর কোড মডিউলে ভাগ করা যায়। প্রতিটি Haskell ফাইল একটি মডিউল হিসেবে কাজ করতে পারে। উদাহরণ:
module Main whereএখানে Main হচ্ছে মডিউলের নাম, এবং where কীওয়ার্ড ব্যবহার করে জানানো হয় যে এই মডিউলটি মূল প্রোগ্রামের অংশ।
3. ইম্পোর্ট স্টেটমেন্ট
অন্যান্য মডিউল থেকে ফাংশন এবং ডেটা টাইপ ইম্পোর্ট করার জন্য import ব্যবহার করা হয়। উদাহরণস্বরূপ, Data.List মডিউল থেকে ফাংশন ইম্পোর্ট করতে:
import Data.Listনির্দিষ্ট ফাংশন ইম্পোর্ট করতে:
import Data.List (sort, nub)4. ফাংশন ডেফিনিশন
Haskell এ ফাংশন সংজ্ঞায়িত করার সময় প্রথমে ফাংশনের নাম, ইনপুট এবং আউটপুট টাইপ ডিক্লারেশন করতে হয়, তারপর ফাংশনের মূল বডি সংজ্ঞায়িত করা হয়।
উদাহরণস্বরূপ, একটি সংখ্যা দ্বিগুণ করার ফাংশন:
double :: Int -> Int
double x = x * 2এখানে:
doubleফাংশনটির নাম।:: Int -> Intটাইপ ডিক্লারেশন যা বলে দেয় যেdoubleএকটিIntইনপুট নিয়েIntআউটপুট দেবে।x = x * 2ফাংশনের বডি যাxকে দ্বিগুণ করে।
5. টাইপ ডিক্লারেশন
প্রত্যেক ফাংশনের ইনপুট ও আউটপুট টাইপ ডিক্লারেশন নির্ধারণ করা যায়, যা টাইপ সেফটি এবং কোডের পাঠযোগ্যতা বাড়ায়। উদাহরণ:
add :: Int -> Int -> Int
add x y = x + yএখানে add ফাংশনটি দুটি Int ইনপুট নিয়ে একটি Int আউটপুট দেয়।
6. প্যাটার্ন ম্যাচিং (Pattern Matching)
Haskell এ প্যাটার্ন ম্যাচিং ফাংশন সংজ্ঞায়িত করতে ব্যবহৃত হয়, যা ইনপুটের বিভিন্ন অবস্থার জন্য বিভিন্ন আউটপুট প্রদান করে। উদাহরণ:
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)এখানে factorial ফাংশনটি 0 ইনপুট পেলে 1 রিটার্ন করবে, আর অন্যান্য ক্ষেত্রে n * factorial (n - 1) রিটার্ন করবে।
7. গার্ড (Guards)
গার্ড ব্যবহার করে ফাংশনের জন্য শর্ত নির্ধারণ করা যায়। উদাহরণ:
absolute :: Int -> Int
absolute x
| x < 0 = -x
| otherwise = xএখানে absolute ফাংশনটি গার্ড ব্যবহার করে x এর মান 0 এর কম হলে -x এবং অন্যথায় x প্রদান করবে।
8. ল্যাম্বডা এক্সপ্রেশন (Lambda Expressions)
Haskell এ ল্যাম্বডা এক্সপ্রেশন অস্থায়ী বা এককালীন ফাংশন তৈরি করতে ব্যবহৃত হয়। এটি \ চিহ্ন দিয়ে শুরু হয়। উদাহরণ:
add = \x y -> x + yএখানে \x y -> x + y একটি ল্যাম্বডা এক্সপ্রেশন যা x এবং y যোগফল রিটার্ন করে।
9. লিস্ট কম্প্রিহেনশন (List Comprehension)
লিস্ট কম্প্রিহেনশন Haskell এ লিস্ট থেকে নির্দিষ্ট শর্তের উপর ভিত্তি করে মানগুলি সংগ্রহ করতে ব্যবহৃত হয়। উদাহরণ:
evenNumbers = [x | x <- [1..10], even x]এখানে evenNumbers একটি লিস্ট তৈরি করে যার মধ্যে 1 থেকে 10 পর্যন্ত সংখ্যাগুলির মধ্যে even x (যেগুলি জোড় সংখ্যা) রয়েছে।
10. রেকারশন (Recursion)
Haskell এ লুপ না থাকায় রেকারশন ব্যবহার করে পুনরাবৃত্তিমূলক কাজ করা হয়। উদাহরণ:
sumList :: [Int] -> Int
sumList [] = 0
sumList (x:xs) = x + sumList xsএখানে sumList একটি রেকারসিভ ফাংশন যা একটি লিস্টের সব উপাদানের যোগফল প্রদান করে।
11. মেইন ফাংশন (Main Function)
Haskell প্রোগ্রাম চালানোর জন্য main ফাংশন ব্যবহার করা হয়। এটি IO () টাইপের একটি ফাংশন। উদাহরণ:
main :: IO ()
main = do
putStrLn "Hello, Haskell!"এখানে main ফাংশনটি Hello, Haskell! প্রিন্ট করবে।
উদাহরণস্বরূপ সম্পূর্ণ কোড:
module Main where
double :: Int -> Int
double x = x * 2
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)
main :: IO ()
main = do
print (double 4)
print (factorial 5)এই প্রোগ্রামে:
doubleফাংশন একটি সংখ্যা দ্বিগুণ করে।factorialফাংশন একটি সংখ্যার ফ্যাক্টোরিয়াল প্রদান করে।mainফাংশনdoubleএবংfactorialএর আউটপুট প্রিন্ট করে।
উপসংহার
Haskell এর কোড স্ট্রাকচার এবং সিনট্যাক্স প্রোগ্রামিংকে সহজ, কার্যকরী এবং মডুলার করে তোলে। ফাংশনাল প্রোগ্রামিং, প্যাটার্ন ম্যাচিং, এবং টাইপ সিস্টেমের ব্যবহার Haskell এর কোডিং স্টাইলকে শক্তিশালী এবং নির্ভরযোগ্য করে তোলে।
Read more