Haskell এ Functions এবং Expressions এর ব্যবহার
Haskell একটি ফাংশনাল প্রোগ্রামিং ভাষা, তাই ফাংশন এবং এক্সপ্রেশন এর গুরুত্ব অপরিসীম। ফাংশন এবং এক্সপ্রেশন ব্যবহার করে আপনি জটিল সমস্যার সমাধান করতে পারেন এবং Haskell এর শক্তিশালী টাইপ সিস্টেম এবং পিউর ফাংশনাল প্রোগ্রামিং প্যারাডাইমের মাধ্যমে কোডের সঠিকতা নিশ্চিত করতে পারেন।
১. Functions (ফাংশন)
Haskell এ, ফাংশনগুলি প্রথম শ্রেণীর নাগরিক (first-class citizens), অর্থাৎ ফাংশনগুলোকে আর্গুমেন্ট হিসেবে গ্রহণ করা, অথবা ফিরিয়ে দেওয়া যায়। Haskell এর ফাংশনগুলি পিউর ফাংশন হয়, যা পার্শ্বপ্রতিক্রিয়া (side-effects) ছাড়া ইনপুটের ওপর ভিত্তি করে আউটপুট দেয়।
ফাংশন ডিফাইনেশন
একটি ফাংশন ডিফাইন করতে let বা where কিওয়ার্ড ব্যবহার করা হয়। উদাহরণস্বরূপ:
add :: Int -> Int -> Int -- টাইপ সিগনেচার
add x y = x + y -- ফাংশন ডেফিনিশনএখানে add ফাংশন দুটি পূর্ণসংখ্যা (Int) নেয় এবং তাদের যোগফল প্রদান করে।
ফাংশন ব্যবহার
একটি ফাংশন ব্যবহার করতে, আপনি কেবল ফাংশনের নাম এবং আর্গুমেন্ট প্রদান করেন:
Prelude> add 3 5
8হাইঅর্ডার ফাংশন (Higher-Order Functions)
Haskell এ, ফাংশনগুলি হাইঅর্ডার ফাংশন হতে পারে, অর্থাৎ ফাংশন অন্য ফাংশনকে আর্গুমেন্ট হিসেবে নিতে পারে অথবা অন্য ফাংশন ফিরিয়ে দিতে পারে।
উদাহরণ:
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xsএখানে map ফাংশন একটি ফাংশন f নেয় এবং একটি লিস্টের প্রতিটি উপাদানের ওপর f ফাংশন প্রয়োগ করে।
ব্যবহার:
Prelude> map (*2) [1, 2, 3]
[2, 4, 6]এখানে, map ফাংশন লিস্টের প্রতিটি উপাদানকে দুই গুণ করেছে।
আর্গুমেন্টের মাধ্যমে ফাংশন কম্পোজিশন
Haskell এ ফাংশনগুলিকে কম্পোজ (একত্রিত) করা খুবই সহজ। . অপারেটর ব্যবহার করে দুটি ফাংশন একত্রিত করা যায়।
(.) :: (b -> c) -> (a -> b) -> a -> cব্যবহার:
Prelude> (map (*2) . map (+1)) [1, 2, 3]
[4, 6, 8]এখানে, প্রথমে +1 ফাংশন এবং পরে *2 ফাংশন প্রয়োগ করা হয়েছে।
২. Expressions (এক্সপ্রেশন)
Haskell একটি এক্সপ্রেশন-ভিত্তিক ভাষা, অর্থাৎ একটি প্রোগ্রাম বা কোডের প্রতিটি অংশ একটি এক্সপ্রেশন। এক্সপ্রেশন হলো এমন একটি অংশ যা একটি ফলাফল প্রদান করে। এক্সপ্রেশনগুলির মাধ্যমে আপনি গাণিতিক, যৌক্তিক এবং কন্ট্রোল ফ্লো সম্পর্কিত কাজ করতে পারেন।
গাণিতিক এক্সপ্রেশন
Haskell এ গাণিতিক এক্সপ্রেশনগুলি সাধারণত পরিচিত গণনা অপারেটরগুলির মাধ্যমে তৈরি হয়:
Prelude> 3 + 5
8
Prelude> 10 * 4 - 2
38লজিক্যাল এক্সপ্রেশন
আপনি লজিক্যাল এক্সপ্রেশনও তৈরি করতে পারেন, যেমন:
Prelude> True && False
False
Prelude> not True
Falseকন্ট্রোল ফ্লো এক্সপ্রেশন
Haskell এ if-then-else স্টেটমেন্ট একটি এক্সপ্রেশন হিসাবে কাজ করে, অর্থাৎ এটি একটি মান প্রদান করে।
Prelude> if 5 > 3 then "True" else "False"
"True"এখানে, if-then-else একটি এক্সপ্রেশন হিসেবে কাজ করেছে, এবং True অথবা False রিটার্ন করেছে।
লিস্ট কম্প্রিহেনশন
Haskell এ লিস্ট কম্প্রিহেনশন একটি শক্তিশালী এক্সপ্রেশন, যা আপনাকে একটি লিস্ট থেকে নতুন লিস্ট তৈরি করতে সহায়ক।
Prelude> [x * 2 | x <- [1..5], x `mod` 2 == 0]
[4, 8]এখানে, লিস্ট কম্প্রিহেনশন 1 থেকে 5 পর্যন্ত সংখ্যাগুলির মধ্যে শুধু যুগল সংখ্যা গুলিকে দুই গুণ করেছে।
৩. ফাংশন এবং এক্সপ্রেশন এর মধ্যে সম্পর্ক
ফাংশন এবং এক্সপ্রেশন Haskell এ একে অপরের সাথে গভীরভাবে সম্পর্কিত। একটি ফাংশন আসলে একটি এক্সপ্রেশন, এবং এক্সপ্রেশনগুলোকে ব্যবহার করে আমরা কার্যকলাপ সম্পাদন করি।
যেমন:
double :: Int -> Int
double x = x * 2এখানে double ফাংশনটি একটি এক্সপ্রেশন (x * 2) ব্যবহার করে।
এছাড়া, আপনি একটি এক্সপ্রেশন লিখতে পারেন যা সরাসরি একটি ফাংশনের মধ্যে থাকে:
Prelude> let addSquares x y = (x * x) + (y * y)
Prelude> addSquares 3 4
25এখানে, addSquares ফাংশনে x * x এবং y * y এক্সপ্রেশনগুলো ব্যবহার করা হয়েছে।
উপসংহার
Haskell এ ফাংশন এবং এক্সপ্রেশন একে অপরের সঙ্গে সম্পর্কিত এবং ফাংশনাল প্রোগ্রামিংয়ের মূল ভিত্তি। ফাংশনগুলি কোডের মডুলার এবং পুনঃব্যবহারযোগ্য অংশ হিসেবে কাজ করে, আর এক্সপ্রেশনগুলো কোডের কার্যকারিতা এবং ফলস্বরূপ আউটপুট নির্ধারণ করে। Haskell এর এই বৈশিষ্ট্যগুলি কোডকে আরও সোজা, পরিষ্কার, এবং নির্ভরযোগ্য করে তোলে, যা ফাংশনাল প্রোগ্রামিংয়ের মূল উদ্দেশ্য।
Read more