Skill

Lists এবং List Operations (লিস্ট এবং লিস্ট অপারেশনস)

লিস্প (LISP) - Computer Programming

549

LISP ভাষার মূল ডেটা স্ট্রাকচার হলো লিস্ট। LISP এর সব কিছু প্রাথমিকভাবে লিস্ট হিসেবে কাজ করে এবং লিস্ট ডেটা স্ট্রাকচারই এই ভাষার একাধিক শক্তিশালী বৈশিষ্ট্য ও সুবিধা প্রদান করে। LISP-এ লিস্ট ব্যবহারের মাধ্যমে আপনি যেকোনো ধরনের ডেটা সংগঠিত, প্রক্রিয়া এবং পরিচালনা করতে পারেন। এই টিউটোরিয়ালে আমরা লিস্ট এবং এর উপর কিছু সাধারণ লিস্ট অপারেশনস আলোচনা করবো।


১. লিস্ট (List)

LISP-এ লিস্ট একটি সিকোয়েন্স যা একাধিক উপাদান ধারণ করে। লিস্টের প্রতিটি উপাদান একটি এটম বা অন্য লিস্ট হতে পারে। LISP-এ তালিকা তৈরি করতে প্যারেন্টেসিস ব্যবহার করা হয়, এবং এর মধ্যে উপাদানগুলো সাদা স্পেস দ্বারা পৃথক করা হয়।

উদাহরণ:

(setq mylist '(1 2 3 4 5))  ; একটি সাধারণ তালিকা

এখানে mylist হলো একটি তালিকা যার মধ্যে রয়েছে 1, 2, 3, 4, এবং 5


২. লিস্টের প্রথম উপাদান (CAR) এবং বাকি উপাদান (CDR)

LISP-এ car এবং cdr দুটি গুরুত্বপূর্ণ ফাংশন, যা তালিকার প্রথম উপাদান এবং বাকি উপাদান বের করে।

  • car: এটি একটি তালিকার প্রথম উপাদান প্রদান করে।
  • cdr: এটি একটি তালিকার বাকি উপাদান প্রদান করে (প্রথম উপাদান বাদে)।

উদাহরণ:

(setq mylist '(1 2 3 4 5))
(car mylist)  ; আউটপুট: 1
(cdr mylist)  ; আউটপুট: (2 3 4 5)

এখানে, car তালিকার প্রথম উপাদান 1 প্রদান করেছে এবং cdr বাকী তালিকা (2 3 4 5) প্রদান করেছে।


৩. cons ফাংশন (Constructing Lists)

LISP-এ cons একটি ফাংশন যা একটি নতুন এলিমেন্ট এবং একটি তালিকা একসাথে যোগ করে একটি নতুন তালিকা তৈরি করে। cons ফাংশন সাধারণত একটি নতুন উপাদান এবং একটি বিদ্যমান তালিকা একত্রিত করতে ব্যবহৃত হয়।

উদাহরণ:

(cons 0 '(1 2 3))  ; আউটপুট: (0 1 2 3)

এখানে, cons ০ নামক উপাদানটিকে তালিকার শুরুতে যুক্ত করেছে, ফলে নতুন তালিকা (0 1 2 3) তৈরি হয়েছে।


৪. লিস্টের দৈর্ঘ্য (Length of List)

LISP-এ length ফাংশন ব্যবহার করে একটি তালিকার দৈর্ঘ্য (অথবা উপাদানের সংখ্যা) নির্ধারণ করা যেতে পারে।

উদাহরণ:

(length '(1 2 3 4 5))  ; আউটপুট: 5

এটি তালিকার উপাদানের সংখ্যা 5 প্রদান করবে।


৫. লিস্টের মধ্যে উপাদান খোঁজা (Member Checking)

LISP-এ member ফাংশন ব্যবহার করে একটি তালিকার মধ্যে কোনো উপাদান আছে কিনা তা পরীক্ষা করা যেতে পারে।

উদাহরণ:

(member 3 '(1 2 3 4 5))  ; আউটপুট: (3 4 5)
(member 6 '(1 2 3 4 5))  ; আউটপুট: NIL

এখানে, member ফাংশনটি তালিকাতে 3 খুঁজে পাওয়ার পর, এর থেকে পরবর্তী অংশ (3 4 5) প্রদান করেছে। অন্যদিকে, 6 তালিকায় না থাকায় NIL প্রদান করেছে।


৬. লিস্টে নতুন উপাদান যুক্ত করা (Adding Elements to List)

LISP-এ push এবং pop ফাংশন ব্যবহার করে একটি তালিকার শুরুতে উপাদান যোগ করা এবং অপসারণ করা যায়।

  • push: এটি তালিকার শুরুতে একটি উপাদান যোগ করে।
  • pop: এটি তালিকার প্রথম উপাদানটি সরিয়ে দেয়।

উদাহরণ:

(setq mylist '(2 3 4))
(push 1 mylist)  ; আউটপুট: (1 2 3 4)

(setq mylist '(1 2 3 4))
(pop mylist)  ; আউটপুট: 1, mylist এখন (2 3 4)

এখানে, push ফাংশন ১ কে তালিকার শুরুতে যোগ করেছে এবং pop ফাংশন তালিকার প্রথম উপাদানটি সরিয়ে দিয়েছে।


৭. লিস্ট অপারেশনস: mapcar, reduce, filter

LISP-এ mapcar, reduce, এবং filter এর মতো অনেক শক্তিশালী লিস্ট অপারেশন রয়েছে, যা আপনাকে লিস্টের প্রতিটি উপাদানের উপর কোনো ফাংশন প্রয়োগ করতে, তাদের উপর অপারেশন করতে বা নির্দিষ্ট শর্ত অনুযায়ী উপাদান ফিল্টার করতে সাহায্য করে।

উদাহরণ ১: mapcar (ম্যাপ অপারেশন)

(mapcar #'(lambda (x) (* x 2)) '(1 2 3 4))  ; আউটপুট: (2 4 6 8)

এখানে, mapcar ফাংশনটি lambda ফাংশনটির মাধ্যমে তালিকার প্রতিটি উপাদানকে ২ দিয়ে গুণ করেছে।

উদাহরণ ২: reduce (সামগ্রিক অপারেশন)

(reduce #'+ '(1 2 3 4 5))  ; আউটপুট: 15

এখানে, reduce ফাংশনটি তালিকার সকল উপাদান যোগ করেছে, ফলে ফলস্বরূপ 15 পাওয়া গেছে।

উদাহরণ ৩: remove-if (শর্তে ফিল্টারিং)

(remove-if #'(lambda (x) (< x 3)) '(1 2 3 4 5))  ; আউটপুট: (3 4 5)

এখানে, remove-if ফাংশনটি শর্ত অনুযায়ী 3 এর নিচের সব উপাদান বাদ দিয়ে দিয়েছে।


৮. লিস্ট সাজানো (Sorting Lists)

LISP-এ একটি তালিকাকে সাজানোর জন্য sort ফাংশন ব্যবহার করা যেতে পারে, যা তালিকাটি একটি নির্দিষ্ট ক্রমে সাজিয়ে দেয় (যেমন ছোট থেকে বড় বা বড় থেকে ছোট)।

উদাহরণ:

(sort '(5 2 9 1 4) #'<)  ; আউটপুট: (1 2 4 5 9)

এখানে, sort ফাংশনটি সংখ্যাগুলোকে ছোট থেকে বড় সাজিয়ে দিয়েছে।


সারসংক্ষেপ

LISP-এ লিস্ট একটি শক্তিশালী ডেটা স্ট্রাকচার এবং তার উপর বিভিন্ন লিস্ট অপারেশনস আপনাকে ডেটা পরিচালনা করতে সাহায্য করে। এখানে LISP-এ লিস্ট সম্পর্কিত কিছু গুরুত্বপূর্ণ অপারেশনসের সংক্ষিপ্ত তালিকা:

  • car এবং cdr: তালিকার প্রথম উপাদান এবং বাকি উপাদান বের করে।
  • cons: একটি নতুন উপাদান এবং একটি তালিকা মিশিয়ে নতুন তালিকা তৈরি করে।
  • length: একটি তালিকার দৈর্ঘ্য নির্ধারণ করে।
  • member: তালিকার মধ্যে একটি উপাদান খুঁজে বের করে।
  • push এবং pop: তালিকায় উপাদান যোগ এবং অপসারণের জন্য ব্যবহৃত হয়।
  • mapcar, reduce, filter: তালিকার প্রতিটি উপাদানের উপর অপারেশন করা, ফলাফল সংগ্রহ করা বা ফিল্টার করা।
  • sort: তালিকা সাজানো।

LISP-এ লিস্ট ব্যবহার এবং লিস্ট অপারেশনগুলি আপনাকে শক্তিশালী ডেটা ম্যানিপুলেশন টুলস প্রদান করে।

Content added By

LISP-এ লিস্ট (List) হল একটি অন্যতম গুরুত্বপূর্ণ ডাটা স্ট্রাকচার। এটি এলিমেন্টগুলির একটি অর্ডারড সংগ্রহ, এবং LISP এর প্রোগ্রামিংয়ের মূল উপাদান হিসেবে ব্যবহৃত হয়। LISP এ লিস্ট তৈরি এবং ম্যানিপুলেট করা (Manipulation) সহজ এবং শক্তিশালী।

এখানে LISP-এ লিস্ট তৈরি এবং ম্যানিপুলেশন সম্পর্কে বিস্তারিত আলোচনা করা হলো।


১. LISP-এ লিস্ট তৈরি (Creating Lists)

LISP-এ লিস্ট তৈরি করতে list ফাংশন বা প্যারেন্টেসিসের মাধ্যমে সরাসরি লিস্ট ডিফাইন করা হয়।

list ফাংশন ব্যবহার করে লিস্ট তৈরি:

list ফাংশন দিয়ে আপনি একাধিক এলিমেন্টের একটি লিস্ট তৈরি করতে পারেন।

উদাহরণ:

(setq mylist (list 1 2 3 4 5))  ; লিস্ট তৈরি

এখানে, mylist নামক ভেরিয়েবলটি একটি লিস্ট ধারণ করে যার উপাদানগুলো হল 1, 2, 3, 4, 5

সরাসরি লিস্ট তৈরি:

LISP-এ প্যারেন্টেসিস ব্যবহার করে সরাসরি লিস্ট তৈরি করা যায়।

উদাহরণ:

(setq mylist '(1 2 3 4 5))  ; লিস্ট তৈরি

এখানে, ' (single quote) ব্যবহার করে সরাসরি লিস্ট তৈরি করা হয়েছে। এটি list ফাংশনের সমতুল্য।


২. লিস্ট Manipulation (Manipulating Lists)

LISP-এ লিস্টের সাথে বিভিন্ন ধরণের ম্যানিপুলেশন করতে পারে, যেমন এলিমেন্ট যোগ করা, এলিমেন্ট মুছে ফেলা, উপাদান বের করা ইত্যাদি।

লিস্টের প্রথম উপাদান বের করা (car)

car ফাংশন ব্যবহার করে লিস্টের প্রথম উপাদান বের করা হয়।

উদাহরণ:

(setq mylist '(1 2 3 4 5))
(car mylist)   ; আউটপুট: 1

এখানে, car প্রথম উপাদান 1 রিটার্ন করবে।

লিস্টের বাকি উপাদান বের করা (cdr)

cdr ফাংশন ব্যবহার করে লিস্টের প্রথম উপাদান বাদে বাকি অংশ বের করা হয়।

উদাহরণ:

(cdr mylist)   ; আউটপুট: (2 3 4 5)

এখানে, cdr ফাংশন লিস্টের প্রথম উপাদান বাদে বাকি অংশ (2 3 4 5) রিটার্ন করবে।

লিস্টে নতুন এলিমেন্ট যোগ করা (cons)

cons ফাংশন ব্যবহার করে লিস্টের শুরুতে একটি নতুন উপাদান যোগ করা হয়।

উদাহরণ:

(cons 0 mylist)  ; আউটপুট: (0 1 2 3 4 5)

এখানে, 0 একটি নতুন উপাদান হিসেবে লিস্টের শুরুতে যোগ করা হয়েছে, ফলে নতুন লিস্ট হয়ে গেছে (0 1 2 3 4 5)

লিস্টের দৈর্ঘ্য বের করা (length)

length ফাংশন ব্যবহার করে একটি লিস্টের দৈর্ঘ্য (এলিমেন্টের সংখ্যা) বের করা হয়।

উদাহরণ:

(length mylist)  ; আউটপুট: 5

এখানে, mylist লিস্টের মোট ৫টি উপাদান আছে, তাই আউটপুট হবে 5

লিস্টের একটি উপাদান পাওয়া (nth)

nth ফাংশন ব্যবহার করে লিস্টের একটি নির্দিষ্ট ইনডেক্সের উপাদান পাওয়া যায়।

উদাহরণ:

(nth 2 mylist)  ; আউটপুট: 3

এখানে, nth 2 দিয়ে ২য় ইনডেক্সের (তৃতীয় উপাদান) মান বের করা হয়েছে, যা 3 হবে।

লিস্টের উপাদান অনুসন্ধান (memv বা memq)

লিস্টের মধ্যে কোনো নির্দিষ্ট উপাদান আছে কিনা তা পরীক্ষা করতে memv বা memq ফাংশন ব্যবহার করা হয়।

উদাহরণ:

(memv 3 mylist)  ; আউটপুট: (3 4 5)
(memv 10 mylist) ; আউটপুট: NIL

এখানে, 3 উপাদানটি লিস্টে পাওয়া যাবে, তাই আউটপুট হবে (3 4 5)। আর 10 উপাদানটি না থাকলে আউটপুট হবে NIL


৩. লিস্টের কিছু বিশেষ ফাংশন

লিস্ট কনক্যাটেনেশন (append)

append ফাংশন ব্যবহার করে দুটি বা ততোধিক লিস্ট একত্রিত করা যায়।

উদাহরণ:

(setq list1 '(1 2 3))
(setq list2 '(4 5 6))
(append list1 list2)  ; আউটপুট: (1 2 3 4 5 6)

এখানে, দুটি লিস্ট list1 এবং list2 একত্রিত করা হয়েছে, এবং নতুন লিস্ট (1 2 3 4 5 6) রিটার্ন হয়েছে।

লিস্ট থেকে একটি উপাদান মুছে ফেলা (remove)

remove ফাংশন ব্যবহার করে লিস্ট থেকে একটি নির্দিষ্ট উপাদান মুছে ফেলা হয়।

উদাহরণ:

(remove 3 mylist)  ; আউটপুট: (1 2 4 5)

এখানে, 3 উপাদানটি লিস্ট থেকে মুছে ফেলা হয়েছে, এবং নতুন লিস্ট হয়ে গেছে (1 2 4 5)


সারসংক্ষেপ

ফাংশনব্যাখ্যাউদাহরণ
listলিস্ট তৈরি করার জন্য ব্যবহৃত।(list 1 2 3)
carলিস্টের প্রথম উপাদান বের করতে ব্যবহৃত।(car '(1 2 3))
cdrলিস্টের প্রথম উপাদান বাদে বাকি অংশ বের করতে ব্যবহৃত।(cdr '(1 2 3))
consএকটি নতুন উপাদান লিস্টের শুরুতে যোগ করতে ব্যবহৃত।(cons 0 '(1 2 3))
lengthলিস্টের দৈর্ঘ্য বের করতে ব্যবহৃত।(length '(1 2 3))
nthলিস্টের নির্দিষ্ট ইনডেক্সের উপাদান বের করতে ব্যবহৃত।(nth 2 '(1 2 3))
memvলিস্টে একটি উপাদান খোঁজার জন্য ব্যবহৃত।(memv 3 '(1 2 3))
appendদুটি বা ততোধিক লিস্ট একত্রিত করতে ব্যবহৃত।(append '(1 2) '(3 4))
removeলিস্ট থেকে একটি নির্দিষ্ট উপাদান মুছে ফেলার জন্য ব্যবহৃত।(remove 3 '(1 2 3))

LISP-এ লিস্ট তৈরি এবং ম্যানিপুলেশন অত্যন্ত শক্তিশালী এবং ব্যবহারযোগ্য। বিভিন্ন ফাংশন ব্যবহার করে লিস্টের উপাদান বের করা, যোগ করা, মুছে ফেলা ইত্যাদি কাজ সহজেই করা যায়।

Content added By

LISP (LISt Processing) ভাষায় Lists হল প্রধান ডাটা স্ট্রাকচার এবং car, cdr, এবং cons এর মতো ফাংশনগুলি LISP লিস্টের উপাদান অ্যাক্সেস এবং ট্র্যাভার্সাল করতে ব্যবহৃত হয়। এগুলি খুবই গুরুত্বপূর্ণ ফাংশন যা লিস্টের কার্যকারিতা এবং লজিকাল কাঠামো তৈরি করতে সাহায্য করে। এখানে আমরা car, cdr, এবং cons ফাংশনের বিস্তারিত আলোচনা করব।


১. car (first element of a list)

car ফাংশনটি একটি লিস্টের প্রথম উপাদান (first element) প্রদান করে। এটি লিস্টের প্রথম উপাদানটি এক্সেস করতে ব্যবহৃত হয় এবং অন্য সমস্ত উপাদান অগ্রাহ্য করা হয়।

উদাহরণ:

(setq mylist '(1 2 3 4))  ; একটি লিস্ট ঘোষণা
(car mylist)  ; আউটপুট: 1

এখানে, car ফাংশনটি লিস্টের প্রথম উপাদান 1 প্রদান করেছে।

আরও একটি উদাহরণ:

(setq mylist '((1 2) (3 4) (5 6)))  ; একটি নেস্টেড লিস্ট
(car mylist)  ; আউটপুট: (1 2)

এখানে, car ফাংশনটি নেস্টেড লিস্টের প্রথম উপাদান (1 2) প্রদান করছে।


২. cdr (rest of the list)

cdr ফাংশনটি একটি লিস্টের বাকি অংশ (rest of the list) প্রদান করে, অর্থাৎ প্রথম উপাদান বাদে বাকি সমস্ত উপাদান। এটি লিস্টের প্রথম উপাদান বাদে সমস্ত উপাদান নিয়ে একটি নতুন লিস্ট তৈরি করে।

উদাহরণ:

(setq mylist '(1 2 3 4))  ; একটি লিস্ট ঘোষণা
(cdr mylist)  ; আউটপুট: (2 3 4)

এখানে, cdr ফাংশনটি লিস্টের প্রথম উপাদান বাদে বাকি অংশ (2 3 4) প্রদান করেছে।

আরও একটি উদাহরণ:

(setq mylist '((1 2) (3 4) (5 6)))  ; একটি নেস্টেড লিস্ট
(cdr mylist)  ; আউটপুট: ((3 4) (5 6))

এখানে, cdr ফাংশনটি প্রথম উপাদান (1 2) বাদে বাকি অংশ ((3 4) (5 6)) প্রদান করেছে।


৩. cons (construct a new pair)

cons ফাংশনটি দুটি উপাদানকে একটি নতুন জোড়া (pair) হিসেবে একত্রিত করতে ব্যবহৃত হয়। এটি একটি নতুন লিস্ট তৈরি করে, যেখানে প্রথম উপাদানটি হল তার প্রথম আর্গুমেন্ট এবং দ্বিতীয় উপাদানটি হলো তার দ্বিতীয় আর্গুমেন্ট। সাধারণত এটি একটি নতুন লিস্টের প্রথম উপাদান হিসেবে ব্যবহৃত হয়।

উদাহরণ:

(setq mylist '(2 3 4))  ; একটি লিস্ট ঘোষণা
(cons 1 mylist)  ; আউটপুট: (1 2 3 4)

এখানে, cons ফাংশনটি 1 এবং mylist লিস্টটিকে একত্রিত করে নতুন একটি লিস্ট তৈরি করেছে যা (1 2 3 4)

আরও একটি উদাহরণ:

(setq mylist '(3 4 5))  ; একটি লিস্ট ঘোষণা
(cons 1 (cons 2 mylist))  ; আউটপুট: (1 2 3 4 5)

এখানে, cons ফাংশনটি প্রথমে 2 এবং mylist লিস্টটিকে একত্রিত করে (2 3 4 5) তৈরি করেছে এবং পরে 1 কে ওই লিস্টের সাথে যুক্ত করে নতুন লিস্ট (1 2 3 4 5) তৈরি করেছে।


List Traversal (List-এর উপাদানগুলি একের পর এক প্রক্রিয়া করা)

LISP এ লিস্টের উপাদানগুলি এক এক করে প্রক্রিয়া (traverse) করতে হলে সাধারণত car এবং cdr ফাংশনগুলোকে ব্যবহার করা হয়। আপনি এগুলির মাধ্যমে একটি লিস্টের সমস্ত উপাদান নিয়ে কোন কাজ করতে পারেন, যেমন প্রিন্ট করা বা কোনো শর্ত যাচাই করা।

উদাহরণ (List Traversal):

(setq mylist '(1 2 3 4 5))

(defun print-list (lst)
  (when lst  ; যদি লিস্টটি খালি না হয়
    (print (car lst))  ; প্রথম উপাদান প্রিন্ট করা
    (print-list (cdr lst))))  ; বাকি উপাদান প্রক্রিয়া করা

(print-list mylist)  ; আউটপুট: 1 2 3 4 5

এখানে, print-list ফাংশনটি car এবং cdr ফাংশন ব্যবহার করে লিস্টের সমস্ত উপাদান প্রিন্ট করে। এটি একটি রিকার্সিভ ফাংশন, যা লিস্টের প্রথম উপাদান প্রিন্ট করে এবং পরে বাকি অংশে রিকার্সন করে প্রক্রিয়া চালায়।


সংক্ষেপ

ফাংশনবর্ণনা
carলিস্টের প্রথম উপাদান প্রদান করে।
cdrলিস্টের প্রথম উপাদান বাদে বাকি অংশ প্রদান করে।
consদুটি উপাদানকে একটি নতুন জোড়া (pair) হিসেবে একত্রিত করে।
List Traversalcar এবং cdr ব্যবহার করে লিস্টের সমস্ত উপাদান একের পর এক প্রক্রিয়া করা।

car, cdr, এবং cons ফাংশনগুলি LISP এর লিস্টের কার্যকারিতা এবং ট্র্যাভার্সাল (যতদূর পর্যন্ত উপাদানগুলি প্রক্রিয়া করা) সহজ এবং কার্যকরী করে তোলে। LISP ভাষায় লিস্টের ওপর কাজ করার সময় এই ফাংশনগুলো খুবই গুরুত্বপূর্ণ এবং প্রয়োজনীয়।

Content added By

LISP ভাষায় Association Lists (A-Lists) এবং Property Lists (P-Lists) দুটি সাধারণ ডাটা স্ট্রাকচার হিসেবে ব্যবহৃত হয়। এই দুটি ডাটা স্ট্রাকচার মূলত কী (key)-ভ্যালু (value) পেয়ার বা অ্যাসোসিয়েশন হিসেবে কাজ করে, যেখানে কোনো একটি কী এর সাথে সংশ্লিষ্ট মান সংরক্ষিত থাকে।

এগুলি সাধারণত ডাটা ম্যানেজমেন্ট, কনফিগারেশন সেটিংস, এবং লুকআপ অপারেশন এর জন্য ব্যবহার করা হয়। LISP এর মধ্যে এদের ব্যবহারের কিছু মৌলিক পার্থক্য এবং ব্যবহার আছে।


১. Association Lists (A-Lists)

Association Lists (A-Lists), যা সাধারণত A-lists নামে পরিচিত, LISP এ একটি জনপ্রিয় ডাটা স্ট্রাকচার যা একটি লিস্ট এর মধ্যে key-value পেয়ার সংরক্ষণ করে। A-list মূলত কী এবং মান (value) এর একটি তালিকা (list), যেখানে প্রতিটি উপাদান একটি pair হয়ে থাকে, প্রথম অংশটি কী এবং দ্বিতীয় অংশটি মান।

A-Lists এর গঠন:

  • প্রতিটি উপাদান একটি pair বা cons cell, যা একটি কী এবং তার সংশ্লিষ্ট মান ধারণ করে। একটি সাধারণ A-list তালিকা যেমন: ((key1 value1) (key2 value2) (key3 value3))

A-Lists এর উদাহরণ:

(setq a-list '((name . "John") (age . 30) (city . "New York")))

এখানে:

  • name, age, এবং city হলো কী, এবং তাদের সংশ্লিষ্ট মান হলো "John", 30, এবং "New York"
  • ., এটি একটি LISP-এর dotted pair সিম্বল, যা key-value পেয়ারকে নির্দেশ করে।

A-Lists ব্যবহার:

  1. এলিমেন্ট খোঁজা (Lookup an element):
    A-list থেকে একটি কী এর মান বের করতে assoc ফাংশন ব্যবহার করা হয়।

    (assoc 'name a-list)  ; আউটপুট: (name . "John")

    এখানে, assoc ফাংশন a-list থেকে name কী এর সাথে সম্পর্কিত মান বের করবে।

  2. ভ্যালু পরিবর্তন (Update the value):
    setf ব্যবহার করে একটি নতুন মান অ্যাসাইন করা যায়:

    (setf (cdr (assoc 'age a-list)) 31)  ; age এর মান আপডেট করা হচ্ছে

    এখানে, assoc ব্যবহার করে age কী খোঁজা হয়েছে এবং setf দিয়ে তার মান পরিবর্তন করা হয়েছে।

A-Lists এর বৈশিষ্ট্য:

  • A-list খুবই সহজ এবং সরল ডাটা স্ট্রাকচার।
  • A-list এর কার্যকারিতা ছোট ডাটা সেটগুলোর জন্য খুবই উপযুক্ত, তবে বড় ডাটা সেটের জন্য এর পারফরম্যান্স সীমাবদ্ধ হতে পারে, কারণ এটি লিনিয়ার সার্চ করে (O(n) টাইম কমপ্লেক্সিটি)।
  • A-list সাধারণত দ্রুত ডেভেলপমেন্টের জন্য ব্যবহৃত হয়, কিন্তু তার কার্যকারিতা বড় ডাটা স্ট্রাকচারের সাথে সীমিত।

২. Property Lists (P-Lists)

Property Lists (P-Lists) একটি বিশেষ ধরনের অ্যাসোসিয়েশন লিস্ট যা লিস্টের মধ্যে properties বা attributes সংরক্ষণ করতে ব্যবহৃত হয়। এটি LISP এর প্রাথমিক ডাটা স্ট্রাকচার যা মূলত key-value পেয়ার রাখে, কিন্তু এতে properties কিছুটা পৃথকভাবে সংরক্ষিত হয়।

P-Lists এর গঠন:

  • P-Lists-এ, কীগুলি সোজা লিস্টের মধ্যে রাখা হয়, এবং তাদের মান তালিকার পরবর্তী উপাদান হিসেবে রাখা হয়। সাধারণভাবে, P-list এর গঠন এই রকম হয়: (key1 value1 key2 value2 key3 value3)

P-Lists এর উদাহরণ:

(setq p-list '(name "John" age 30 city "New York"))

এখানে:

  • name, age, city হল কী, এবং তাদের মান হলো "John", 30, এবং "New York"
  • এখানে প্রতিটি কী মানের পরে আসে, তবে কী-ভ্যালু পেয়ার দুটি আলাদা কন্টেইনারে (তবে একে অপরের পাশাপাশে) থাকে।

P-Lists ব্যবহার:

  1. এলিমেন্ট খোঁজা (Lookup an element):
    P-list থেকে একটি কী এর মান বের করতে getf ফাংশন ব্যবহার করা হয়:

    (getf p-list 'name)  ; আউটপুট: "John"
  2. ভ্যালু পরিবর্তন (Update the value):
    P-list এর মান পরিবর্তন করতে setf ব্যবহার করা হয়:

    (setf (getf p-list 'age) 31)  ; age এর মান আপডেট করা হচ্ছে

P-Lists এর বৈশিষ্ট্য:

  • সোজা এবং সংক্ষিপ্ত: P-lists সাধারণত আরও সোজা এবং সংক্ষিপ্ত হয়, তবে A-list থেকে কিছুটা ভিন্নভাবে কাজ করে।
  • ডাটা অ্যাক্সেস: P-lists এ কী এবং মানের অবস্থান নির্দিষ্ট নয়, ফলে getf ব্যবহার করা হয় একটি কী এর মান অ্যাক্সেস করতে।
  • পারফরম্যান্স: P-lists সাধারণত লিনিয়ার সার্চ করে এবং বড় ডাটা সেটের জন্য এর পারফরম্যান্স A-list এর মতোই সীমিত হতে পারে।

৩. A-Lists এবং P-Lists এর মধ্যে পার্থক্য

বৈশিষ্ট্যA-ListsP-Lists
ডাটা স্ট্রাকচারকীগুলির সাথে মানগুলো পেয়ার হিসেবে থাকে ((key . value))কীগুলির সাথে মানগুলো সরাসরি লিস্টে থাকে (key1 value1 key2 value2)
স্টোরেজ মেথডকীগুলির সাথে মানটি dotted pair হিসেবে থাকেকীগুলি এবং মানগুলি আলাদা এলিমেন্ট হিসেবে থাকে
খোঁজাassoc ফাংশন ব্যবহার করে লিনিয়ার সার্চgetf ফাংশন ব্যবহার করে সরাসরি অ্যাক্সেস
বৈশিষ্ট্যসহজ এবং কার্যকর, তবে বড় ডাটা সেটের জন্য পারফরম্যান্স কমডাটা কম্প্যাক্ট এবং সহজ, তবে পারফরম্যান্স A-list এর মতো
ফাংশনালিটিকীগুলির মান দ্রুত অ্যাক্সেস করতে ব্যবহার করা যায়সহজ অ্যাক্সেস, কিন্তু কিছুটা বেশি মেমরি ব্যবহার হতে পারে

সারসংক্ষেপ

Association Lists (A-Lists) এবং Property Lists (P-Lists) দুটি LISP এর ডাটা স্ট্রাকচার যা কী এবং মানের পেয়ার সংরক্ষণ করে। A-lists সাধারণত dotted pair ফর্ম্যাটে থাকে, যেখানে P-lists কীগুলি এবং মানগুলো আলাদা উপাদান হিসেবে থাকে। A-lists ছোট ডাটা সেটে খুব কার্যকরী, তবে P-lists বেশি সংক্ষিপ্ত এবং কিছু ক্ষেত্রে অধিক কার্যক্ষম। তবে, দুটি স্ট্রাকচারই তাদের নিজস্ব সুবিধা এবং সীমাবদ্ধতা সহ আসে, এবং উপযুক্ত কেসে ব্যবহৃত হতে পারে।

Content added By

Map, Filter, এবং Reduce হল তিনটি গুরুত্বপূর্ণ Higher-Order Functions যা Functional Programming এর মূল কৌশল হিসেবে কাজ করে। এই তিনটি অপারেশন ফাংশনাল প্রোগ্রামিং ভাষায়, যেমন LISP, Python, JavaScript, ইত্যাদিতে ব্যবহৃত হয়, যাতে লিস্ট (বা যেকোনো Iterable) এর উপর কার্যক্রম পরিচালনা করা যায়। এই অপারেশনগুলি আপনাকে ডাটা স্ট্রাকচার (বিশেষ করে লিস্ট) এ বিভিন্ন কার্যক্রম সহজে প্রয়োগ করতে সহায়ক হয়।

এখানে আমরা Map, Filter, এবং Reduce এর ধারণা, ব্যবহার, এবং উদাহরণ আলোচনা করব।


১. Map Operation (ম্যাপ অপারেশন)

Map অপারেশন একটি ফাংশন নিয়ে কাজ করে, যেটি একটি লিস্টের প্রতিটি উপাদানকে প্রসেস করে এবং নতুন একটি লিস্ট তৈরি করে, যেখানে প্রতিটি উপাদান ফাংশনটির মাধ্যমে পরিবর্তিত হয়।

ব্যবহারের ধরন:

(mapcar function list)

এখানে, mapcar হল LISP-এর map অপারেশনের কনস্ট্রাক্ট, যা লিস্টের প্রতিটি উপাদানে ফাংশন প্রয়োগ করে নতুন একটি লিস্ট ফেরত দেয়।

উদাহরণ:

ধরা যাক, আমাদের একটি লিস্ট আছে এবং আমরা প্রতিটি উপাদানকে ২ দিয়ে গুণ করতে চাই।

(setq numbers '(1 2 3 4 5))
(mapcar (lambda (x) (* x 2)) numbers)  ; আউটপুট: (2 4 6 8 10)

এখানে:

  • mapcar ফাংশনটি numbers লিস্টের প্রতিটি উপাদানে (lambda (x) (* x 2)) ফাংশনটি প্রয়োগ করেছে এবং একটি নতুন লিস্ট তৈরি করেছে যেখানে প্রতিটি উপাদান দ্বিগুণ হয়েছে।

২. Filter Operation (ফিল্টার অপারেশন)

Filter অপারেশন একটি ফাংশন নিয়ে কাজ করে এবং একটি লিস্টের শুধু সেই উপাদানগুলিকে নির্বাচন করে, যা একটি শর্ত পূর্ণ করে। এই অপারেশনটি নতুন একটি লিস্ট তৈরি করে, যেখানে শুধু শর্ত পূর্ণকারী উপাদানগুলি থাকবে।

ব্যবহারের ধরন:

(remove-if-not predicate list)

এখানে, remove-if-not হল LISP এর filter অপারেশন, যা একটি শর্তের ভিত্তিতে লিস্ট থেকে নির্দিষ্ট উপাদানগুলি ফিল্টার করে।

উদাহরণ:

ধরা যাক, আমাদের একটি লিস্ট আছে এবং আমরা শুধু এমন উপাদানগুলি রাখতে চাই, যেগুলোর মান ৩ এর বেশি।

(setq numbers '(1 2 3 4 5 6))
(remove-if-not (lambda (x) (> x 3)) numbers)  ; আউটপুট: (4 5 6)

এখানে:

  • remove-if-not ফাংশনটি numbers লিস্ট থেকে এমন উপাদানগুলিই রাখবে, যেগুলি 3 এর বেশি হবে।

৩. Reduce Operation (রিডিউস অপারেশন)

Reduce অপারেশন একটি ফাংশন নিয়ে কাজ করে এবং লিস্টের উপাদানগুলিকে একক একটি মানে রিডিউস করে, অর্থাৎ সমস্ত উপাদানকে একটি সিঙ্গেল ভ্যালুতে পরিণত করা হয়। এই অপারেশনটি সাধারণত কিছু নির্দিষ্ট কাজ সম্পাদন করার জন্য যেমন যোগফল বা গুণফল বের করার জন্য ব্যবহৃত হয়।

ব্যবহারের ধরন:

(reduce function list)

এখানে, reduce হল LISP এর reduce অপারেশন, যা লিস্টের উপাদানগুলিকে একটি একক মানে কম্পাইল করে। এটি প্রথম দুইটি উপাদান নিয়ে ফাংশনটি প্রয়োগ করে এবং পরবর্তী উপাদানগুলির উপরও একইভাবে কাজ করে।

উদাহরণ:

ধরা যাক, আমাদের একটি লিস্ট আছে এবং আমরা তার সব উপাদানের যোগফল বের করতে চাই।

(setq numbers '(1 2 3 4 5))
(reduce #'+ numbers)  ; আউটপুট: 15

এখানে:

  • reduce ফাংশনটি numbers লিস্টের সমস্ত উপাদানগুলোর ওপর + ফাংশনটি প্রয়োগ করে, এবং যোগফল হিসেবে 15 প্রদান করবে।

পার্থক্য

অপারেশনউদ্দেশ্যউদাহরণ
Mapপ্রতিটি উপাদানে ফাংশন প্রয়োগ করে একটি নতুন লিস্ট তৈরি করা।(mapcar (lambda (x) (* x 2)) '(1 2 3))
Filterশর্ত পূর্ণকারী উপাদানগুলিকে নির্বাচন করে নতুন একটি লিস্ট তৈরি করা।(remove-if-not (lambda (x) (> x 3)) '(1 2 3 4))
Reduceলিস্টের উপাদানগুলিকে একটি একক মানে রিডিউস করা।(reduce #'+ '(1 2 3 4 5))

সারসংক্ষেপ

  • Map অপারেশনটি একটি লিস্টের প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে এবং নতুন একটি লিস্ট তৈরি করে।
  • Filter অপারেশনটি একটি শর্তের ভিত্তিতে লিস্ট থেকে কিছু উপাদান ফিল্টার করে এবং নতুন একটি লিস্ট তৈরি করে।
  • Reduce অপারেশনটি একটি লিস্টের সমস্ত উপাদানকে একটি একক মানে কম্পাইল করে, যেমন যোগফল বা গুণফল বের করা।

এই তিনটি অপারেশন ফাংশনাল প্রোগ্রামিং এ ডাটা প্রক্রিয়াকরণের অত্যন্ত শক্তিশালী টুলস এবং LISP সহ অন্যান্য ভাষায় ব্যবহৃত হয়ে থাকে।

Content added By
Promotion

Are you sure to start over?

Loading...