LISP (LISt Processing) একটি নির্দিষ্ট ধরনের সিনট্যাক্স অনুসরণ করে, যা S-Expression নামে পরিচিত। S-Expression (Symbolic Expression) হল LISP এর একটি মৌলিক কাঠামো, যা কোড এবং ডাটাকে একই রকম গঠন হিসেবে পরিচালনা করতে সাহায্য করে। এর মাধ্যমে LISP এর কোড অত্যন্ত সাদামাটা এবং কার্যকরীভাবে লেখা যায়।
এখানে LISP এর বেসিক সিনট্যাক্স এবং S-Expressions এর মাধ্যমে কীভাবে কোড লেখা হয় তা আলোচনা করা হবে।
১. S-Expression কি?
S-Expression হল একটি সাধারন গঠন যেখানে একটি এক্সপ্রেশন সাধারণত প্যারেন্টেসিসের মধ্যে থাকে। প্রতিটি S-Expression-এ একটি ফাংশন এবং তার আর্গুমেন্টস থাকে, এবং এটি সাধারণত এই রূপে লেখা হয়:
(f x y z)এখানে:
fহল একটি ফাংশন বা অপারেটর,x,y,zহল আর্গুমেন্ট।
S-Expression-এ কোড এবং ডাটা একসাথে একইভাবে থাকে, তাই LISP কোডটি একটি খুব সাদামাটা, শক্তিশালী এবং একীকৃত কাঠামো ব্যবহার করে।
২. LISP এর সিনট্যাক্সের মৌলিক উপাদান
প্রথম শ্রেণীর এক্সপ্রেশন (First-Class Expressions):
LISP এ এক্সপ্রেশন সবকিছু—এটি ডাটা বা কোড হতে পারে। কোডটিকে সাধারণত প্যারেন্টেসিস দিয়ে আবদ্ধ করা হয়। উদাহরণস্বরূপ:(+ 1 2 3)এখানে
+ফাংশন, এবং1,2,3এর উপাদান (arguments)। এটি যোগফল হিসেবে6প্রদান করবে।অপারেটর এবং আর্গুমেন্টস:
একটি S-Expression সাধারণত একটি অপারেটর বা ফাংশন এবং তার আর্গুমেন্ট নিয়ে গঠিত থাকে। ফাংশন এবং অপারেটর সমূহকে সিঙ্গল বা মাল্টিপল আর্গুমেন্টের সঙ্গে ব্যবহার করা যেতে পারে।উদাহরণ ১:
(* 3 4)এটি
3 * 4 = 12রিটার্ন করবে।উদাহরণ ২:
(/ 10 2)এটি
10 / 2 = 5রিটার্ন করবে।
৩. ভেরিয়েবল ডিফাইনেশন এবং অ্যাসাইনমেন্ট
LISP এ ভেরিয়েবল ডিফাইন এবং অ্যাসাইন করতে setq বা defvar ফাংশন ব্যবহার করা হয়।
উদাহরণ:
(setq x 10)
(setq y 20)এখানে, x এর মান হবে 10 এবং y এর মান হবে 20।
৪. ফাংশন ডিফাইনেশন
LISP এ ফাংশন ডিফাইন করার জন্য defun কীওয়ার্ড ব্যবহার করা হয়। ফাংশন ডিফাইন করার সময় তার নাম, আর্গুমেন্ট এবং কাজ লিখতে হয়।
উদাহরণ:
(defun add (a b)
(+ a b))এখানে, add নামক ফাংশন দুটি ইনপুট (a, b) নিয়ে তাদের যোগফল রিটার্ন করবে।
৫. কন্ডিশনাল এক্সপ্রেশন
LISP এ শর্ত (condition) যাচাই করতে if ফাংশন ব্যবহার করা হয়। if ফাংশনের মধ্যে একটি শর্ত থাকে, যদি শর্ত সত্য হয় তবে প্রথম এক্সপ্রেশনটি রিটার্ন হবে, অন্যথায় দ্বিতীয় এক্সপ্রেশনটি রিটার্ন হবে।
উদাহরণ:
(if (> 5 3)
"Greater"
"Smaller")এখানে শর্ত হল 5 > 3, যা সত্য (True) হওয়ায় আউটপুট হবে "Greater"।
৬. লুপ এবং রিকার্সন
LISP এ সাধারণত লুপের পরিবর্তে রিকার্সন (Recursion) ব্যবহার করা হয়। রিকার্সন হল একটি ফাংশন যা নিজেকে কল করে।
উদাহরণ (ফ্যাক্টোরিয়াল ফাংশন):
(defun factorial (n)
(if (<= n 1)
1
(* n (factorial (- n 1)))))এটি একটি রিকার্সিভ ফাংশন, যা ফ্যাক্টোরিয়াল বের করতে ব্যবহার করা হয়। যদি n 1 বা তার কম হয়, তখন 1 রিটার্ন করবে, অন্যথায় n এবং n-1 এর ফ্যাক্টোরিয়ালের গুণফল রিটার্ন করবে।
৭. লিস্ট এবং অ্যাক্সেসিং অপারেশন
LISP এ লিস্ট (List) অত্যন্ত গুরুত্বপূর্ণ ডাটা স্ট্রাকচার। এটি একটি সিরিজ অব উপাদান, যা প্যারেন্টেসিসের মধ্যে রাখা হয়। লিস্টের প্রথম উপাদানকে car এবং বাকি উপাদানকে cdr বলে।
উদাহরণ:
(setq mylist '(1 2 3 4))
(car mylist) ; আউটপুট: 1
(cdr mylist) ; আউটপুট: (2 3 4)এখানে, car প্রথম উপাদান 1 রিটার্ন করবে এবং cdr বাকি অংশ (2 3 4) রিটার্ন করবে।
সারসংক্ষেপ
LISP এর সিনট্যাক্স অত্যন্ত সরল এবং সব কিছু S-Expression নামে পরিচিত। একটি S-Expression হল একটি কোড বা ডাটার এক্সপ্রেশন যা প্যারেন্টেসিসের মধ্যে থাকে এবং এর মধ্যে একটি ফাংশন বা অপারেটর এবং আর্গুমেন্ট থাকে। LISP এর শক্তিশালী বৈশিষ্ট্যগুলি যেমন ফাংশন ডিফাইনেশন, কন্ডিশনাল এক্সপ্রেশন, রিকার্সন, এবং লিস্ট প্রক্রিয়াকরণ, এর কোডিংয়ের ধারণাকে সহজ এবং কার্যকরী করে তোলে।
Read more