Higher-Order Functions এবং Currying

Functions in Haskell (ফাংশন) - হ্যাস্কেল (Haskell) - Computer Programming

354

Haskell এ Higher-Order Functions এবং Currying

Haskell একটি ফাংশনাল প্রোগ্রামিং ভাষা, তাই এখানে Higher-Order Functions (হাইঅর্ডার ফাংশন) এবং Currying (কারি) ব্যবহৃত হয় যা কোডের মডুলারিটি, পুনঃব্যবহারযোগ্যতা এবং দক্ষতা বাড়ায়।


১. Higher-Order Functions (হাইঅর্ডার ফাংশন)

Higher-Order Functions এমন ফাংশন যা অন্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে বা অন্য ফাংশন ফিরিয়ে দিতে পারে। Haskell এর ফাংশনাল প্রোগ্রামিং প্যারাডাইমে, ফাংশনগুলি প্রথম শ্রেণীর নাগরিক (first-class citizens), তাই আপনি ফাংশনকে আর্গুমেন্ট হিসেবে ব্যবহার করতে পারেন, বা একটি ফাংশন থেকে অন্য ফাংশন ফিরিয়ে দিতে পারেন।

হাইঅর্ডার ফাংশন এর উদাহরণ:

-- একটি সাধারণ হাইঅর্ডার ফাংশন যা একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে
applyFunction :: (a -> b) -> a -> b
applyFunction f x = f x

এখানে, applyFunction একটি ফাংশন নেয় যা a টাইপের ইনপুট নিয়ে b টাইপের আউটপুট দেয়, এবং তারপর x আর্গুমেন্টের মাধ্যমে সেই ফাংশনটি প্রয়োগ করে।

ব্যবহার:

Prelude> applyFunction (*2) 5
10

এখানে, applyFunction ফাংশনটি (*2) ফাংশনকে আর্গুমেন্ট হিসেবে নিয়ে 5 এর ওপর প্রয়োগ করেছে এবং ফলস্বরূপ 10 প্রদান করেছে।

আরেকটি উদাহরণ: map ফাংশন

Haskell এ একটি জনপ্রিয় হাইঅর্ডার ফাংশন হল map, যা একটি ফাংশন নেয় এবং একটি লিস্টের প্রতিটি উপাদানের ওপর সেই ফাংশনটি প্রয়োগ করে।

map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs

এখানে map একটি ফাংশন f এবং একটি লিস্ট নেয়, এবং লিস্টের প্রতিটি উপাদানের ওপর f ফাংশন প্রয়োগ করে একটি নতুন লিস্ট তৈরি করে।

ব্যবহার:

Prelude> map (*2) [1, 2, 3, 4]
[2, 4, 6, 8]

এখানে, map (*2) ফাংশনটি লিস্টের প্রতিটি উপাদানকে দুই গুণ করেছে।


২. Currying (কারি)

Currying একটি কৌশল, যেখানে একটি বহু-আর্গুমেন্টযুক্ত ফাংশনকে একক আর্গুমেন্ট নেয় এমন একটি সিকোয়েন্স ফাংশনে রূপান্তরিত করা হয়। Haskell এ, সব ফাংশনই কারি ফাংশন হিসেবে কাজ করে। এর মানে হলো যে, একটি ফাংশন যা দুটি আর্গুমেন্ট নেয়, আসলে সেটি দুটি একক আর্গুমেন্ট গ্রহণকারী ফাংশনের একটি সিকোয়েন্স।

কারি ফাংশনের উদাহরণ:

add :: Int -> Int -> Int
add x y = x + y

এখানে, add একটি ফাংশন যা দুটি আর্গুমেন্ট নেয়, তবে Haskell এটিকে কারি ফাংশন হিসেবে দেখায়। add x ফাংশনটি x গ্রহণ করে একটি নতুন ফাংশন তৈরি করে যা y গ্রহণ করে এবং তাদের যোগফল প্রদান করে।

ব্যবহার:

Prelude> let add5 = add 5
Prelude> add5 3
8

এখানে, add 5 ফাংশনটি একটি নতুন ফাংশন add5 তৈরি করেছে, যা 5 যোগ করবে যেকোনো ইনপুটের সাথে। তারপর add5 3 এর মাধ্যমে 5 + 3 এর ফলাফল 8 পাওয়া যায়।

কারি ফাংশন এবং হাইঅর্ডার ফাংশন:

কারি ফাংশনগুলি হাইঅর্ডার ফাংশনগুলির সাথে মিলেমিশে কাজ করতে পারে। উদাহরণস্বরূপ, আমরা map ফাংশনকে কারি ফাংশনের সাথে ব্যবহার করতে পারি:

map :: (a -> b) -> [a] -> [b]

এখানে, map একটি কারি ফাংশন এবং f এর আর্গুমেন্টটি একটি ফাংশন হওয়ার কারণে এটি হাইঅর্ডার ফাংশনও।

Prelude> map (add 2) [1, 2, 3, 4]
[3, 4, 5, 6]

এখানে, add 2 একটি নতুন ফাংশন তৈরি করেছে যা 2 যোগ করবে, এবং map (add 2) এই ফাংশনটি লিস্টের প্রতিটি উপাদানের ওপর প্রয়োগ করেছে।


৩. Currying এবং Partial Application

Partial Application হচ্ছে কারি ফাংশন থেকে আংশিকভাবে আর্গুমেন্ট প্রদান করে নতুন ফাংশন তৈরি করা। এটি currying এর মাধ্যমে খুব সহজেই করা যায়। এর মানে হলো, আপনি একটি ফাংশনকে আংশিকভাবে আর্গুমেন্ট দিয়ে একটি নতুন ফাংশন তৈরি করতে পারেন।

উদাহরণ: Partial Application

multiply :: Int -> Int -> Int
multiply x y = x * y

এখন, multiply ফাংশনটি দুটি আর্গুমেন্ট নেয়, কিন্তু আমরা প্রথম আর্গুমেন্টটি শুধুমাত্র দিয়ে একটি নতুন ফাংশন তৈরি করতে পারি:

Prelude> let multiplyBy2 = multiply 2
Prelude> multiplyBy2 5
10

এখানে, multiplyBy2 একটি নতুন ফাংশন তৈরি করেছে যা 2 গুণ করবে যেকোনো ইনপুটের সাথে।


উপসংহার

Higher-Order Functions এবং Currying Haskell এর প্রধান বৈশিষ্ট্যগুলির মধ্যে অন্যতম। Haskell এ Higher-Order Functions আপনাকে কোড পুনঃব্যবহারযোগ্য এবং মডুলার করার সুযোগ দেয়, যেখানে Currying ফাংশনের আর্গুমেন্টগুলো ধাপে ধাপে গ্রহণ করার মাধ্যমে কোডের নমনীয়তা বৃদ্ধি করে। Partial Application এর মাধ্যমে আপনি কারি ফাংশনগুলিকে আরো উপযুক্তভাবে ব্যবহার করতে পারেন। Haskell এর এই বৈশিষ্ট্যগুলি কোডকে আরও শক্তিশালী, পরিষ্কার এবং সঠিক করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...