LISP প্রোগ্রামিং ভাষা এক ধরনের symbolic computation বা symbolic data manipulation এর জন্য খুবই উপযুক্ত। এখানে Symbolic Data বলতে এমন ডাটা বোঝানো হয় যা কোনো নির্দিষ্ট মানের সাথে সম্পর্কিত নয়, বরং তার প্রতিনিধিত্ব করে এমন সিম্বলিক বা অভ্যন্তরীণ উপস্থাপন করে। এই ডাটা ধরনের মধ্যে রয়েছে সিম্বল, লিস্ট, এবং অন্যান্য উপাদান যা সাধারণত প্রোগ্রামিং ভাষাগুলোর থেকে আলাদাভাবে ব্যবহৃত হয়।
LISP-এ সিম্বলিক ডাটা এবং তার ম্যানিপুলেশন অত্যন্ত গুরুত্বপূর্ণ এবং এর জন্য বেশ কিছু শক্তিশালী ফাংশন রয়েছে। চলুন, সিম্বলিক ডাটা এবং এর ম্যানিপুলেশন সম্পর্কে বিস্তারিত জানি।
১. Symbolic Data কী?
Symbolic Data সাধারণত সিম্বল (symbol) হিসেবে পরিচিত থাকে, যা বিভিন্ন মান বা ধারণাকে প্রতিনিধিত্ব করে। এই ডাটাগুলোর কোন নির্দিষ্ট মান থাকে না, বরং এগুলোর মাধ্যমে একটি ধারণা বা কনসেপ্ট প্রকাশ করা হয়। উদাহরণস্বরূপ, একটি সিম্বল x গণনার জন্য একটি ভেরিয়েবল হতে পারে অথবা এটি কোনো ফাংশনের নামও হতে পারে।
সিম্বল (Symbol):
LISP-এ সিম্বল হল একটি মৌলিক ইউনিট যা কোনো বিশেষ অর্থ ধারণ করে। সিম্বল ব্যবহার করে আপনি ভেরিয়েবল, ফাংশন নাম, এবং অন্যান্য অনেক ধরনের ডাটা এক্সপ্রেশন তৈরি করতে পারেন।
উদাহরণ:
(setq x 10) ; x হল একটি সিম্বল যার মান 10এখানে, x একটি সিম্বল এবং এর মান 10।
সিম্বলিক ডাটা উদাহরণ:
(setq person 'John) ; person সিম্বল "John"-কে প্রতিনিধিত্ব করছেএখানে, person একটি সিম্বল এবং এর মান বা প্রতিনিধিত্ব John।
২. LISP-এ Symbolic Data Manipulation
LISP-এ সিম্বলিক ডাটার সাথে বিভিন্ন ধরনের ম্যানিপুলেশন করতে অনেক ফাংশন রয়েছে, যেমন সিম্বল তুলনা করা, তাদের মান বের করা, এবং তাদের মধ্যে সম্পর্ক তৈরি করা। চলুন কিছু সাধারণ ফাংশন এবং সিম্বলিক ডাটা ম্যানিপুলেশন সম্পর্কে জানি।
symbolp ফাংশন:
symbolp ফাংশন দিয়ে চেক করা যায় যে, একটি ভেরিয়েবল সিম্বল কিনা।
উদাহরণ:
(symbolp 'x) ; আউটপুট: T (সত্য), কারণ 'x' একটি সিম্বল
(symbolp 10) ; আউটপুট: NIL, কারণ 10 একটি নাম্বারeq এবং eql ফাংশন:
eq: সিম্বল বা অবজেক্টের তুলনা করতে ব্যবহৃত হয়। এটি চেক করে যে দুটি সিম্বল বা অবজেক্ট একে অপরকে রেফার করছে কিনা।eql: দুটি সিম্বল বা নাম্বারের মান সমান কিনা চেক করতে ব্যবহৃত হয়।
উদাহরণ:
(setq x 'apple)
(setq y 'apple)
(setq z 'orange)
(eq x y) ; আউটপুট: T (সত্য), কারণ 'x' এবং 'y' একই সিম্বল 'apple' কে রেফার করছে
(eq x z) ; আউটপুট: NIL, কারণ 'x' এবং 'z' আলাদা সিম্বলকে রেফার করছেsymbol-value ফাংশন:
symbol-value ফাংশন ব্যবহার করে একটি সিম্বলের মান বের করা যায়।
উদাহরণ:
(setq x 10)
(symbol-value 'x) ; আউটপুট: 10, কারণ 'x' এর মান 10intern ফাংশন:
intern ফাংশন ব্যবহার করে একটি সিম্বলকে একটি প্যারামিটার দিয়ে ইন্টার্ন (interned) করা হয়, যা গ্লোবাল সিম্বল টেবিলের মধ্যে সংরক্ষিত হয়।
উদাহরণ:
(intern "my-symbol") ; আউটপুট: MY-SYMBOL (সিম্বলটি ইন্টার্ন হবে)৩. লিস্ট এবং সিম্বলিক ডাটা ম্যানিপুলেশন
LISP-এ লিস্ট একটি শক্তিশালী ডাটা স্ট্রাকচার, এবং এর মাধ্যমে সিম্বলিক ডাটা ম্যানিপুলেশন সহজে করা যায়। লিস্টের মধ্যে সিম্বল রাখতে পারেন, এবং সেগুলোর মান বা বৈশিষ্ট্য ম্যানিপুলেট করতে পারেন।
লিস্ট তৈরি এবং সিম্বল যোগ করা:
(setq mylist '(apple orange banana)) ; লিস্ট তৈরি
(setq mylist (cons 'grape mylist)) ; লিস্টে নতুন সিম্বল 'grape' যোগ করাএখানে, grape সিম্বলটি লিস্টের প্রথমে যোগ করা হয়েছে, এবং নতুন লিস্ট হবে: (grape apple orange banana)।
লিস্টের মধ্যে সিম্বল খোঁজা (memv):
memv ফাংশন ব্যবহার করে লিস্টের মধ্যে কোনো সিম্বল আছে কিনা তা পরীক্ষা করা যায়।
উদাহরণ:
(memv 'apple '(banana orange apple grape)) ; আউটপুট: (apple grape)
(memv 'pear '(banana orange apple grape)) ; আউটপুট: NILলিস্টের প্রথম সিম্বল বের করা (car):
(car '(apple orange banana)) ; আউটপুট: appleলিস্টের বাকি অংশ বের করা (cdr):
(cdr '(apple orange banana)) ; আউটপুট: (orange banana)৪. কাস্টম সিম্বলিক ডাটা এবং ম্যানিপুলেশন
LISP-এ আপনি কাস্টম সিম্বলিক ডাটা তৈরি করতে পারেন এবং সেগুলোর সাথে ম্যানিপুলেশন করতে পারেন। উদাহরণস্বরূপ, একটি সিম্বলকে একটি অবজেক্ট হিসেবে ব্যবহার করা এবং তার মান বা প্রপার্টি ম্যানিপুলেট করা।
উদাহরণ (কাস্টম সিম্বল):
(setq person 'john)
(setq john '("name" "John Doe" "age" 30))
;; john সিম্বলের মান এখন একটি লিস্ট যা name, age ধারণ করে।এখানে, john একটি সিম্বল যা একটি লিস্টের মান ধারণ করে, যেখানে একটি ব্যক্তির নাম এবং বয়স রয়েছে।
সারসংক্ষেপ
LISP-এ Symbolic Data এবং তার ম্যানিপুলেশন একটি গুরুত্বপূর্ণ দিক, যা কোডে ভেরিয়েবল, ফাংশন, এবং কাস্টম ডাটা সিম্বল দ্বারা কাজ করার সুবিধা প্রদান করে। সিম্বলিক ডাটার ম্যানিপুলেশন ফাংশন যেমন symbolp, eq, eql, symbol-value, intern, memv, এবং cons ব্যবহার করে সিম্বল এবং লিস্টের মাধ্যমে ডাটা পরিবর্তন এবং যাচাই করা যায়।
| ফাংশন | ব্যাখ্যা | উদাহরণ |
|---|---|---|
symbolp | চেক করে যে এটি একটি সিম্বল কিনা | (symbolp 'x) ; আউটপুট: T |
eq | দুটি সিম্বল বা অবজেক্টের সমান কিনা তা চেক করে | (eq 'x 'x) ; আউটপুট: T |
symbol-value | একটি সিম্বলের মান বের করে | (symbol-value 'x) ; আউটপুট: 10 |
memv | লিস্টে একটি সিম্বল খোঁজা | (memv 'apple '(banana apple grape)) ; আউটপুট: (apple grape) |
cons | নতুন সিম্বল লিস্টে যোগ করা | (cons 'apple '(banana grape)) ; আউটপুট: (apple banana grape) |
LISP-এ সিম্বলিক ডাটা ম্যানিপুলেশন কোডিংকে আরও শক্তিশালী এবং নমনীয় করে তোলে, যা একটি অপরিহার্য বৈশিষ্ট্য প্রোগ্রামিং করার ক্ষেত্রে।
Read more