Skill

LISP এ ডেটা টাইপস (Data Types in LISP)

লিস্প (LISP) - Computer Programming

339

LISP (LISt Processing) একটি উচ্চস্তরের প্রোগ্রামিং ভাষা, যার ডেটা টাইপগুলি খুবই সাদামাটা এবং শক্তিশালী। LISP ভাষায় সব ডেটা টাইপের মৌলিক কাঠামো হলো এটম এবং তালিকা। LISP এর ডেটা টাইপের বেশিরভাগ কাজ ফাংশনাল প্রোগ্রামিংয়ের জন্য বিশেষভাবে ডিজাইন করা এবং তা খুবই নমনীয়। LISP ভাষায় কিছু সাধারণ ডেটা টাইপ এবং তাদের ব্যবহার নিম্নরূপ:


১. এটম (Atom)

এটম হল একটি মৌলিক ডেটা টাইপ, যা একটি একক উপাদানকে প্রতিনিধিত্ব করে। এটম সাধারণত সংখ্যা, সিম্বল, স্ট্রিং বা অন্য যেকোনো মৌলিক ডেটা হতে পারে।

  • সংখ্যা (Number): LISP ভাষায় একক সংখ্যাকে এটম হিসেবে ব্যবহার করা হয়। এটি পূর্ণসংখ্যা (integers) অথবা ভগ্নাংশ (floating-point numbers) হতে পারে।

    উদাহরণ:

    42    ; একটি পূর্ণসংখ্যা
    3.14  ; একটি ভগ্নাংশ
  • সিম্বল (Symbol): সিম্বল সাধারণত ভেরিয়েবল বা কনস্ট্যান্ট হিসেবে ব্যবহৃত হয়। এগুলি এমন একক নাম যা কিছু মান নির্দেশ করে।

    উদাহরণ:

    'x   ; একটি সিম্বল
    'myVar  ; একটি সিম্বল
  • স্ট্রিং (String): স্ট্রিং একটি সিকোয়েন্স অফ ক্যারেক্টার, যা একক উদ্ধৃতি চিহ্নে লেখা হয়।

    উদাহরণ:

    "Hello, LISP!"

২. তালিকা (List)

LISP ভাষার মূল ডেটা স্ট্রাকচার হলো **তালিকা (List)**। তালিকা হলো একটি সিকোয়েন্স যা একাধিক এটম বা অন্য তালিকা ধারণ করতে পারে। LISP এর তালিকা একটি প্যারেন্টেসিসে আবদ্ধ থাকে এবং এর উপাদানগুলো সেমি-কোলন দ্বারা পৃথক করা হয়। তালিকার প্রথম উপাদানটি সাধারণত একটি ফাংশন বা অপারেটর এবং পরবর্তী উপাদানগুলি তার আর্গুমেন্ট হয়ে থাকে।

উদাহরণ:

'(1 2 3 4)   ; একটি তালিকা

এটি একটি সাধারণ তালিকা যা চারটি উপাদান ধারণ করে। লিস্টে শুধুমাত্র এক ধরনের ডেটা থাকতে হবে এমন কোনো বিধিনিষেধ নেই; একাধিক ডেটা টাইপও একত্রে থাকতে পারে।

'(1 "Hello" 3.14)  ; একটি মিশ্রিত তালিকা

৩. নিল (Nil)

Nil হল একটি বিশেষ ডেটা টাইপ, যা শূন্য তালিকা বা বুলিয়ান ফালস হিসেবে কাজ করে। এটি LISP এর একটি প্রাকৃতিক অংশ এবং এটি শূন্য বা কিছু না থাকার প্রতিনিধিত্ব করে।

উদাহরণ:

nil    ; শূন্য তালিকা বা False
()

এটি শূন্য তালিকা বা একটি শূন্য মান (False) এর সমান।


৪. বুলিয়ান (Boolean)

LISP তে বুলিয়ান টাইপ দুটি মান ধারণ করে: T (True) এবং Nil (False)। LISP তে T (বা কোনো মান যা Nil নয়) সত্য (True) হিসেবে গণ্য হয় এবং Nil মানে মিথ্যা (False)।

উদাহরণ:

T     ; সত্য (True)
nil   ; মিথ্যা (False)

৫. ফাংশন (Function)

LISP একটি ফাংশনাল প্রোগ্রামিং ভাষা, তাই ফাংশনও একটি ডেটা টাইপ হিসেবে গণ্য হয়। LISP এ ফাংশনগুলি প্রথম শ্রেণীর নাগরিক (first-class citizens), অর্থাৎ এগুলিকে ভেরিয়েবল হিসেবে পাস করা যায়, রিটার্ন করা যায় এবং অন্য ফাংশনের আর্গুমেন্ট হিসেবে ব্যবহার করা যায়।

উদাহরণ:

(defun square (x) 
  (* x x))    ; একটি ফাংশন যা x এর বর্গ বের করে

এটি একটি ফাংশন তৈরি করে, যা একটি সংখ্যার বর্গফল প্রদান করে।


৬. এ্যাসোসিয়েটিভ অ্যারে (Associative Arrays) বা হ্যাশ টেবিল (Hash Table)

LISP এর কিছু সংস্করণে হ্যাশ টেবিল বা এ্যাসোসিয়েটিভ অ্যারে একটি বিশেষ ডেটা টাইপ হিসেবে ব্যবহৃত হয়, যেখানে কী (key) এবং ভ্যালু (value) জমা থাকে। এটি ডেটা স্টোর করার জন্য খুবই কার্যকরী।

উদাহরণ:

(setq my-hash (make-hash-table))  ; একটি হ্যাশ টেবিল তৈরি
(setf (gethash 'name my-hash) "Alice")  ; 'name' কী-এ "Alice" মান সংরক্ষণ
(gethash 'name my-hash)  ; আউটপুট: "Alice"

৭. স্ট্রাকচার (Structure)

LISP কিছু সংস্করণে স্ট্রাকচার (Structure) বা কাস্টম ডেটা টাইপ তৈরি করতে সক্ষম। এটি ব্যবহারকারীদের তাদের নিজস্ব ডেটা টাইপ বা অবজেক্ট তৈরি করতে সহায়তা করে।

উদাহরণ:

(defstruct person name age)  ; একটি স্ট্রাকচার তৈরি
(setq p1 (make-person :name "John" :age 30))  ; একটি পাত্র তৈরি
(person-name p1)  ; আউটপুট: "John"
(person-age p1)   ; আউটপুট: 30

সারসংক্ষেপ

LISP এর ডেটা টাইপগুলি খুবই সরল এবং নমনীয়, যা ফাংশনাল প্রোগ্রামিংয়ের জন্য বিশেষভাবে উপযুক্ত। LISP এর কিছু প্রধান ডেটা টাইপ হল:

  • এটম (Atom): মৌলিক ডেটা যেমন সংখ্যা, সিম্বল, এবং স্ট্রিং।
  • তালিকা (List): একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা একাধিক উপাদান ধারণ করে।
  • Nil: শূন্য বা ফালস মান।
  • Boolean: সত্য (T) এবং মিথ্যা (Nil)।
  • ফাংশন (Function): ফাংশন একটি ডেটা টাইপ হিসেবে ব্যবহৃত হয়।
  • হ্যাশ টেবিল (Hash Table): কী-ভ্যালু পেয়ার ডেটা স্ট্রাকচার।
  • স্ট্রাকচার (Structure): কাস্টম ডেটা টাইপ বা অবজেক্ট তৈরি।

LISP এ ডেটা টাইপগুলো খুবই সাধারণ কিন্তু শক্তিশালী, যা কোডকে আরো কার্যকরী এবং নমনীয় করে তোলে।

Content added By

LISP-এ স্কেলর ডাটা টাইপস হল সিঙ্গেল ভ্যালু রিপ্রেজেন্ট করার ডাটা টাইপ, যেমন নাম্বার, ক্যারেকটার, এবং স্ট্রিং। এগুলো LISP প্রোগ্রামে ডাটা রেপ্রেজেন্ট করার জন্য খুবই গুরুত্বপূর্ণ। এই ডাটা টাইপগুলো সাধারণত মৌলিক মান (single values) রিপ্রেজেন্ট করে এবং অন্যান্য ডাটা স্ট্রাকচারের সাথে ব্যবহার করা হয়।

চলুন প্রতিটি স্কেলর ডাটা টাইপ সম্পর্কে বিস্তারিত জানি:


১. নাম্বার (Numbers)

LISP-এ নাম্বার বিভিন্ন ধরনের হয়, যেমন ইন্টিজার (পূর্ণসংখ্যা), ফ্লোটিং-পয়েন্ট নাম্বার (ভগ্নাংশ), এবং রেশনাল নাম্বার (ভাগফল)।

ইন্টিজার নাম্বার (Integer Numbers)

LISP ইন্টিজার (পূর্ণসংখ্যা) অর্বিটারি প্রিসিশন (যত বড় চান তত বড়) সাপোর্ট করে।

উদাহরণ:

(setq a 42)      ; ইন্টিজার
(setq b -100)    ; নেগেটিভ ইন্টিজার

ফ্লোটিং-পয়েন্ট নাম্বার (Floating-Point Numbers)

LISP ফ্লোটিং-পয়েন্ট নাম্বার সাপোর্ট করে, যা দশমিক সংখ্যার জন্য ব্যবহৃত হয়।

উদাহরণ:

(setq x 3.14)    ; ফ্লোটিং-পয়েন্ট নাম্বার
(setq y -2.718)  ; নেগেটিভ ফ্লোটিং-পয়েন্ট নাম্বার

রেশনাল নাম্বার (Rational Numbers)

LISP রেশনাল নাম্বারকে ভগ্নাংশ হিসেবে রেপ্রেজেন্ট করতে পারে।

উদাহরণ:

(setq r1 3/4)    ; রেশনাল নাম্বার
(setq r2 -7/2)   ; নেগেটিভ রেশনাল নাম্বার

গণনা অপারেশন (Arithmetic Operations)

LISP-এ নাম্বারগুলোতে গাণিতিক অপারেশন করতে বিভিন্ন ফাংশন রয়েছে।

উদাহরণ:

(+ 5 3)       ; 8 - যোগফল
(- 10 4)      ; 6 - বিয়োগফল
(* 2 3)       ; 6 - গুণফল
(/ 6 2)       ; 3 - ভাগফল

২. ক্যারেকটার (Characters)

LISP-এ ক্যারেকটার একটি সিঙ্গেল চিহ্ন বা সিম্বল রেপ্রেজেন্ট করে। ক্যারেকটারগুলো #\ দিয়ে লেখা হয়।

ক্যারেকটার উদাহরণ:

(setq char1 #\a)   ; ক্যারেকটার 'a'
(setq char2 #\B)   ; ক্যারেকটার 'B'
(setq char3 #\9)   ; ক্যারেকটার '9'
(setq char4 #\Space)  ; ক্যারেকটার স্পেস

ক্যারেকটার এবং স্ট্রিংয়ের মধ্যে পার্থক্য হল যে স্ট্রিং হলো একাধিক ক্যারেকটার, তবে ক্যারেকটার একটি একক সিম্বল।

ক্যারেকটার তুলনা:

ক্যারেকটারগুলোর মধ্যে তুলনা করতে = অপারেটর ব্যবহার করা যায়।

উদাহরণ:

(= #\a #\b)   ; ফলস (NIL) কারণ 'a' সমান নয় 'b' এর

৩. স্ট্রিং (Strings)

স্ট্রিং হলো ক্যারেকটারদের সিকোয়েন্স (ধারা), যা ডাবল কোটস " " দিয়ে লেখা হয়।

স্ট্রিং উদাহরণ:

(setq str1 "Hello")        ; স্ট্রিং "Hello"
(setq str2 "LISP World")    ; স্ট্রিং "LISP World"
(setq str3 "12345")         ; স্ট্রিং "12345"

স্ট্রিংয়ের সাথে বিভিন্ন অপারেশন করা যায়, যেমন যোগফল (concatenation), দৈর্ঘ্য (length), এবং তুলনা (comparison)।

স্ট্রিং অপারেশনস:

  • স্ট্রিংয়ের দৈর্ঘ্য:
    স্ট্রিংয়ের দৈর্ঘ্য বের করতে length ফাংশন ব্যবহার করা হয়।

    উদাহরণ:

    (length "Hello")  ; ফলস্বরূপ: 5
  • স্ট্রিং যোগফল (Concatenation):
    স্ট্রিং যোগফলের জন্য concatenate ফাংশন ব্যবহার করা হয়।

    উদাহরণ:

    (concatenate 'string "Hello" " " "World")  ; ফলস্বরূপ: "Hello World"
  • স্ট্রিং তুলনা (Comparison):
    স্ট্রিং তুলনা করতে string= ফাংশন ব্যবহার করা হয়।

    উদাহরণ:

    (string= "Hello" "Hello")  ; ফলস্বরূপ: T (সত্য), কারণ স্ট্রিং দুটি সমান
    (string= "Hello" "World")  ; ফলস্বরূপ: NIL, কারণ স্ট্রিং দুটি সমান নয়

স্ট্রিং পরিবর্তন (Modification):

  • সাবস্ট্রিং বের করা:
    subseq ফাংশন দিয়ে স্ট্রিংয়ের অংশ বের করা যায়।

    উদাহরণ:

    (subseq "Hello, World!" 7 12)  ; ফলস্বরূপ: "World"

সারসংক্ষেপ

ডাটা টাইপবর্ণনাউদাহরণ
নাম্বারপূর্ণসংখ্যা, দশমিক সংখ্যা, ভগ্নাংশ ইত্যাদি।42, 3.14, -2.718, 3/4
ক্যারেকটারএকক চিহ্ন বা সিম্বল।#\a, #\B, #\Space
স্ট্রিংএকাধিক ক্যারেকটার দিয়ে গঠিত টেক্সট।"Hello", "LISP World", "12345"

LISP-এর স্কেলর ডাটা টাইপস, যেমন নাম্বার, ক্যারেকটার, এবং স্ট্রিং, এই ভাষার শক্তিশালী ডাটা রেপ্রেজেন্টেশন এবং প্রক্রিয়াকরণের উপাদান হিসেবে কাজ করে। এগুলো কোড লেখার সময় ব্যবহৃত হয় গণনা, টেক্সট প্রক্রিয়াকরণ, এবং অন্যান্য সাধারণ কার্যাবলীর জন্য।

Content added By

Lists এবং Arrays দুইটি গুরুত্বপূর্ণ ডাটা স্ট্রাকচার, তবে তাদের ব্যবহার এবং গঠন কিছুটা আলাদা। LISP ভাষায় Lists একটি মৌলিক এবং সবচেয়ে গুরুত্বপূর্ণ ডাটা স্ট্রাকচার, যেখানে Arrays অন্যান্য ভাষায় ব্যবহৃত হয়, কিন্তু LISP এ তারা কম ব্যবহৃত হয়। তবে, LISP তে Arrays এবং Lists এর মধ্যে পার্থক্য এবং তাদের বৈশিষ্ট্যগুলি বোঝা গুরুত্বপূর্ণ।


১. Lists (LISP এর মধ্যে)

LISP এর Lists একটি লিনিয়ার ডাটা স্ট্রাকচার, যেখানে ডাটা উপাদানগুলি প্যারেন্টেসিসের মধ্যে একটি সিরিজ হিসেবে থাকে। LISP ভাষায় Lists হল সবচেয়ে শক্তিশালী এবং গুরুত্বপূর্ণ ডাটা স্ট্রাকচার যা ফাংশনাল প্রোগ্রামিংয়ের জন্য অত্যন্ত উপযোগী।

বৈশিষ্ট্য:

  • Dynamic Size: Lists গুলির সাইজ পরিবর্তনযোগ্য। আপনি একটি লিস্টে নতুন উপাদান যোগ করতে পারেন বা উপাদান সরিয়ে ফেলতে পারেন।
  • Heterogeneous: একটি লিস্টে বিভিন্ন ধরনের ডাটা থাকতে পারে, যেমন সংখ্যা, স্ট্রিং, সিম্বল বা অন্যান্য লিস্ট।
  • Built-in Functions: LISP লিস্টের জন্য বেশ কিছু ফাংশন সরবরাহ করে, যেমন car (প্রথম উপাদান), cdr (বাকি উপাদান), cons (নতুন উপাদান যোগ করা) ইত্যাদি।
  • Recursive Structure: LISP এর লিস্টের গঠন রিকার্সিভ (recursive) হয়, অর্থাৎ, একটি লিস্টের মধ্যে অন্য লিস্ট থাকতে পারে।

উদাহরণ:

(setq mylist '(1 2 3 4))  ; একটি সিম্পল লিস্ট
(car mylist)  ; আউটপুট: 1
(cdr mylist)  ; আউটপুট: (2 3 4)

এখানে, mylist একটি লিস্ট, যা বিভিন্ন উপাদান ধারণ করে। car প্রথম উপাদান (১) প্রদান করে এবং cdr বাকি উপাদান (2 3 4) প্রদান করে।

লিস্টের মধ্যে লিস্ট:

LISP এ একটি লিস্টের মধ্যে আরেকটি লিস্ট থাকতে পারে:

(setq nested-list '((1 2) (3 4) (5 6)))  ; একটি নেস্টেড লিস্ট

এখানে, nested-list তিনটি উপ-লিস্ট ধারণ করে: (1 2), (3 4), এবং (5 6)


২. Arrays

Arrays হলো একটি স্ট্যাটিক ডাটা স্ট্রাকচার, যেখানে ডাটা উপাদানগুলি একটি নির্দিষ্ট আকারে থাকে এবং একাধিক উপাদান একযোগে সংরক্ষণ করতে ব্যবহৃত হয়। Arrays গুলি সাধারণত সংখ্যার বা এক ধরনের ডাটা টাইপের তালিকা হিসেবে ব্যবহৃত হয়। Arrays এর মূল বৈশিষ্ট্য হল তাদের ফিক্সড সাইজ এবং একই টাইপের উপাদান

বৈশিষ্ট্য:

  • Fixed Size: Arrays এর সাইজ পূর্বনির্ধারিত হয় এবং এটি একবার ইনিশিয়ালাইজ করার পর পরিবর্তন করা যায় না।
  • Homogeneous: একটি Array-তে সাধারণত এক ধরনের ডাটা (যেমন শুধু সংখ্যার) থাকে।
  • Random Access: Arrays এর উপাদানগুলোকে সরাসরি ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায়, যেটি লিস্টের তুলনায় দ্রুত হয়।
  • Memory Efficiency: Arrays তুলনামূলকভাবে কম মেমরি ব্যবহার করে, কারণ এটি ফিক্সড সাইজের ডাটা ধারণ করে।

উদাহরণ:

LISP এ Arrays তৈরি করতে আপনাকে make-array ফাংশন ব্যবহার করতে হয়:

(setq myarray (make-array 5 :initial-element 0))  ; একটি Array তৈরি করা

এখানে, myarray একটি Array যা ৫টি উপাদান ধারণ করে এবং প্রতিটি উপাদান প্রথমে ০ দিয়ে ইনিশিয়ালাইজ করা হয়েছে।

অ্যাক্সেস:

Arrays এর উপাদান সরাসরি ইনডেক্স ব্যবহার করে অ্যাক্সেস করা যায়:

(aref myarray 0)  ; আউটপুট: 0 (প্রথম উপাদান)

এখানে, aref ব্যবহার করে myarray এর প্রথম উপাদানটি অ্যাক্সেস করা হয়েছে (ইনডেক্স ০)।


Lists এবং Arrays এর মধ্যে পার্থক্য

বৈশিষ্ট্যListsArrays
আকারডায়নামিক, সাইজ পরিবর্তনযোগ্যফিক্সড সাইজ
উপাদানের প্রকারহেটারোজেনিয়াস (বিভিন্ন ধরনের উপাদান থাকতে পারে)হোমোজেনিয়াস (এক ধরনের উপাদান)
অ্যাক্সেসলিনিয়ার অ্যাক্সেস (এটম বা লিস্টের প্রথম উপাদান ইত্যাদি)র‍্যান্ডম অ্যাক্সেস (ইনডেক্সের মাধ্যমে দ্রুত)
মেমরি ব্যবস্থাপনামেমরি ব্যবস্থাপনা আরো নমনীয়মেমরি কম ব্যবহার, তবে সাইজ ফিক্সড
ব্যবহাররিকার্সন ও ডাটা স্ট্রাকচার তৈরির জন্য উপযুক্তবৃহৎ পরিসরের, একধরনের ডাটা পরিচালনার জন্য উপযুক্ত

সারসংক্ষেপ:

Lists এবং Arrays দুইটি ভিন্ন ধরনের ডাটা স্ট্রাকচার, যাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। Lists LISP ভাষায় প্রধান ডাটা স্ট্রাকচার এবং ডায়নামিক আকারে কাজ করে, যেখানে একাধিক ধরনের ডাটা থাকতে পারে এবং এর গঠন রিকার্সিভ হতে পারে। অন্যদিকে, Arrays একটি ফিক্সড সাইজের ডাটা স্ট্রাকচার যা সাধারণত এক ধরনের ডাটা ধারণ করে এবং দ্রুত অ্যাক্সেসের জন্য ব্যবহৃত হয়। LISP এ Arrays কম ব্যবহৃত হলেও, অন্যান্য প্রোগ্রামিং ভাষায় Arrays বেশি ব্যবহৃত হয়।

Content added By

LISP একটি প্রোগ্রামিং ভাষা যা Symbols এবং Keywords ব্যবহার করে কোডের কার্যপ্রণালী এবং মান পরিচালনা করতে। এই দুটি ধারণা LISP এর ডাটা মডেল এবং কোড স্ট্রাকচারের জন্য গুরুত্বপূর্ণ, এবং এগুলি কোডে বিভিন্ন ভূমিকা পালন করে। নিচে Symbols এবং Keywords এর ব্যবহারের বিস্তারিত আলোচনা করা হলো।


১. Symbols (সীম্বল)

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

Symbols এর গঠন:

একটি Symbol হল এমন একটি নাম যা একটি বিশেষ মান বা কার্যকলাপের প্রতিনিধিত্ব করে। সাধারণত, Symbols নামের মধ্যে কোনো স্পেস, সংখ্যার শুরু, অথবা বিশেষ অক্ষর থাকেনা (যেমন: +, -, * প্রভৃতি)। উদাহরণস্বরূপ, x, y, counter, my-function—এগুলো সবই Symbols।

Symbols এর ব্যবহার:

  1. ভেরিয়েবল ডিফাইন করা:

    (setq x 10)  ; x ভেরিয়েবলে ১০ আসাইন করা হচ্ছে
    (print x)    ; x এর মান প্রিন্ট করা হচ্ছে

    এখানে, x একটি Symbol, যার মান ১০ অ্যাসাইন করা হয়েছে।

  2. ফাংশন নাম হিসাবে ব্যবহার:

    (defun square (x)  ; square একটি ফাংশন নাম
      (* x x))

    এখানে, square একটি Symbol যা ফাংশন হিসেবে ব্যবহার হচ্ছে। ফাংশনের নাম হিসাবে এটি একটি সংজ্ঞায়িত Symbol।

  3. Symbol কে একটি মানের প্রতিনিধিত্ব হিসেবে ব্যবহার:

    (setq symbol-value 'my-symbol)

    এখানে, 'my-symbol একটি Symbol হিসাবে ব্যবহৃত হয়েছে এবং এটিকে একটি ভ্যালু হিসেবে অ্যাসাইন করা হয়েছে।

Symbols এর বৈশিষ্ট্য:

  • Unique Identity: প্রতিটি Symbol এর একটি ইউনিক পরিচয় থাকে, অর্থাৎ, দুটি আলাদা Symbol একই নাম থাকলেও তাদের পরিচয় আলাদা হবে।
  • Evaluation: Symbol সাধারণত তার মানের জন্য রেফারেন্স প্রদান করে। উদাহরণস্বরূপ, (setq x 5) এর পরে, x হবে একটি Symbol এবং তার মান হবে ৫।

২. Keywords (কিওয়ার্ডস)

Keywords LISP এ একটি বিশেষ ধরনের Symbol যা সাধারণত : (colon) চিহ্ন দিয়ে শুরু হয়। Keywords সাধারণত কোডে বিশেষ মান বা ট্যাগ হিসেবে ব্যবহৃত হয় এবং এগুলির মান অপরিবর্তনীয় (immutable)। Keywords প্রধানত ডাটা স্ট্রাকচারের অংশ হিসেবে ব্যবহার করা হয় এবং সেগুলির মধ্যে সাধারণত কোনো ভ্যালু থাকে না।

Keywords এর গঠন:

Keywords সবসময় : দিয়ে শুরু হয় এবং তারা শুধুমাত্র একটি ইউনিক চিহ্ন হিসেবে কাজ করে। যেমন: :foo, :bar, :name, :age—এগুলো সবই Keywords।

Keywords এর ব্যবহার:

  1. ডাটা স্ট্রাকচারে ট্যাগ হিসেবে ব্যবহার:
    Keywords সাধারণত সিম্বলিক ট্যাগ হিসাবে ব্যবহার করা হয়। উদাহরণস্বরূপ, একটি অ্যাসোসিয়েটিভ অ্যারে বা হ্যাশ টেবিলের মধ্যে ট্যাগ হিসেবে ব্যবহার:

    (setq my-data '(:name "John" :age 30 :city "New York"))

    এখানে, :name, :age, :city সব Keywords, এবং এগুলির পাশে ডাটা মান দেওয়া আছে।

  2. ফাংশন প্যারামিটার হিসেবে:
    Keywords ফাংশনের প্যারামিটার বা অপশন হিসেবে ব্যবহার হতে পারে। উদাহরণস্বরূপ:

    (defun greet (name &key greeting)
      (print (concatenate 'string greeting " " name)))
    
    (greet "Alice" :greeting "Hello")

    এখানে, :greeting একটি Keyword হিসেবে ব্যবহৃত হয়েছে।

  3. কিওয়ার্ড হিসাবে মান সেটিং:
    Keywords এর মধ্যে কোনো মান থাকে না। তারা শুধুমাত্র ট্যাগ হিসেবে ব্যবহৃত হয়, কিন্তু যখন ডাটা স্ট্রাকচারের মধ্যে Keywords ব্যবহার করা হয়, তখন তাদের পাশে সংশ্লিষ্ট মান থাকে।

Keywords এর বৈশিষ্ট্য:

  • Immutable: Keywords পরিবর্তন করা যায় না। তাদের মান অপরিবর্তনীয় (constant)।
  • Unique: Keywords এর প্রতিটি ইনস্ট্যান্স ইউনিক এবং তারা কোডের মধ্যে বিশেষ উদ্দেশ্য প্রদান করে।
  • Self-Evaluating: Keywords সাধারণত নিজেই তাদের মান নির্ধারণ করে এবং তাদের ভ্যালুতে কোনো পরিবর্তন সম্ভব নয়।

৩. Symbols এবং Keywords এর মধ্যে পার্থক্য

বৈশিষ্ট্যSymbolsKeywords
নামসাধারণত কোনো নাম, যেমন: x, counter, fooসবসময় : দিয়ে শুরু হয়, যেমন: :name, :age
মানSymbols এর মান থাকতে পারে এবং তারা পরিবর্তনশীল (mutable)Keywords এর মান থাকে না, এগুলি অপরিবর্তনীয় (immutable)
ব্যবহারভেরিয়েবল নাম, ফাংশন নাম, কনস্ট্যান্ট হিসেবে ব্যবহৃত হয়ট্যাগ হিসেবে, ডাটা স্ট্রাকচারে এবং অপশন প্যারামিটার হিসেবে ব্যবহৃত হয়
ইউনিক আইডেন্টিটিSymbols ইউনিক কিন্তু মান পরিবর্তনযোগ্যKeywords সবসময় ইউনিক এবং অপরিবর্তনীয়

৪. Symbols এবং Keywords এর ব্যবহার সংক্ষেপে

  • Symbols: LISP কোডে পরিবর্তনযোগ্য মানের প্রতিনিধিত্ব করে, যেমন ভেরিয়েবল নাম বা ফাংশন নাম। এগুলি সাধারণত প্রোগ্রামের কার্যপ্রণালী নির্ধারণ করে এবং তাদের মান পরিবর্তিত হতে পারে।
  • Keywords: ডাটা স্ট্রাকচারে ট্যাগ হিসেবে ব্যবহার হয় এবং এগুলির কোনো পরিবর্তনশীল মান থাকে না। Keywords প্রধানত immutable থাকে এবং এগুলি সাধারণত ডাটা স্ট্রাকচারগুলির অংশ হিসেবে ব্যবহৃত হয়।

সারসংক্ষেপ

Symbols এবং Keywords LISP প্রোগ্রামিং ভাষার গুরুত্বপূর্ণ ডাটা টাইপ। Symbols সাধারণত পরিবর্তনশীল মান এবং ফাংশন/ভেরিয়েবল নাম হিসেবে ব্যবহৃত হয়, যখন Keywords ডাটা স্ট্রাকচার এবং অপশন প্যারামিটারগুলির জন্য ট্যাগ হিসেবে ব্যবহৃত হয় এবং সেগুলি অপরিবর্তনীয় (immutable)। LISP কোডে এই দুটি ধারণার সঠিক ব্যবহার কোডের গঠন এবং কার্যকারিতা সহজ এবং পরিষ্কার রাখে।

Content added By

LISP প্রোগ্রামিং ভাষায় Boolean Values (যথা সত্য বা মিথ্যা) এবং Nil (যা কিছু না থাকা বা শূন্যতা বোঝায়) দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা। এগুলি প্রোগ্রামিংয়ের বিভিন্ন ধরনের শর্ত বা লজিক্যাল অপারেশন এবং নিয়ন্ত্রণ স্ট্রাকচারের জন্য ব্যবহার করা হয়।


১. Boolean Values (বুলিয়ান মান)

Boolean Values বা বুলিয়ান মান LISP ভাষায় দুটি ভ্যালু দ্বারা প্রতিনিধিত্ব করা হয়:

  • T (True) : সত্য মান
  • NIL (False) : মিথ্যা মান

এই দুইটি মান LISP ভাষায় শর্ত বা তুলনা করার জন্য ব্যবহৃত হয়, যেমন if স্টেটমেন্ট বা লজিক্যাল অপারেশনে।

১.১ Boolean মানের ব্যবহার:

LISP-এ T এবং NIL এর মানে সঠিকভাবে বোঝা দরকার। যেমন:

  • T: LISP-এ T সবসময় সত্য (True) হিসেবে বিবেচিত হয়।
  • NIL: LISP-এ NIL সবসময় মিথ্যা (False) হিসেবে বিবেচিত হয়।

উদাহরণ:

(if T "This is true" "This is false")  ; আউটপুট: "This is true"
(if NIL "This is true" "This is false")  ; আউটপুট: "This is false"

এখানে প্রথম কোডে T অর্থাৎ সত্য, তাই "This is true" আউটপুট হিসেবে প্রদর্শিত হবে। দ্বিতীয় কোডে NIL অর্থাৎ মিথ্যা, তাই "This is false" আউটপুট হিসেবে প্রদর্শিত হবে।

১.২ লজিক্যাল অপারেশন:

LISP-এ Boolean মানের সাহায্যে বিভিন্ন লজিক্যাল অপারেশন করা যায়, যেমন AND, OR, NOT ইত্যাদি।

উদাহরণ:

(and T T)  ; আউটপুট: T (যেহেতু সবই সত্য)
(and T NIL)  ; আউটপুট: NIL (যেহেতু একটি মিথ্যা)
(or T NIL)  ; আউটপুট: T (যেহেতু একটি সত্য)
(not T)  ; আউটপুট: NIL (সত্যের বিপরীত মিথ্যা)

এখানে:

  • (and T T) সব সত্য হওয়ায় আউটপুট সত্য (T) হবে।
  • (or T NIL) যেহেতু একটিতে সত্য (T) রয়েছে, আউটপুট হবে সত্য (T)।

২. Nil এর ধারণা

LISP-এ Nil বিশেষভাবে একটি বিশেষ মান হিসেবে ব্যবহৃত হয়, যা বিভিন্ন পরিস্থিতিতে শূন্যতা, ফাঁকা বা না থাকা নির্দেশ করে। এটি কিছু ক্ষেত্রে False মানের প্রতিনিধিত্ব করতে ব্যবহৃত হয়, তবে এটি শুধুমাত্র একটি Boolean মান নয়, বরং আরো বিভিন্ন প্রেক্ষাপটে ব্যবহৃত হয়।

২.১ Nil হিসাবে False:

এটি Boolean Values এর মতো কাজ করে, যেখানে NIL মিথ্যা (False) মানের প্রতিনিধিত্ব করে।

উদাহরণ:

(if NIL "True" "False")  ; আউটপুট: "False"

এখানে if স্টেটমেন্টে NIL ফাঁকা বা মিথ্যা (False) হিসেবে বিবেচিত হয়, তাই আউটপুট হবে "False"।

২.২ Nil হিসাবে Empty List:

Nil এক্সপ্রেশনটি লিস্টের ক্ষেত্রেও ব্যবহার করা হয়। এটি একটি শূন্য বা খালি তালিকাকে প্রতিনিধিত্ব করে। LISP-এ তালিকা যদি শূন্য হয়, তবে সেটি NIL হিসেবে মূল্যায়িত হয়।

উদাহরণ:

(setq mylist '())  ; শূন্য তালিকা
(print mylist)  ; আউটপুট: NIL

এখানে, mylist একটি শূন্য তালিকা এবং তার মান NIL

২.৩ Nil হিসাবে Empty Value:

LISP এ Nil কোনও কিছু না থাকার বা শূন্য মানের প্রতিনিধিত্ব করে। এটি কখনও কখনও ডাটাবেস বা ডাটা প্রক্রিয়াকরণের ক্ষেত্রেও শূন্য মানের প্রতিনিধিত্ব করতে ব্যবহৃত হয়।

উদাহরণ:

(setq x NIL)
(print x)  ; আউটপুট: NIL

এখানে x এর মান NIL সেট করা হয়েছে, যা শূন্য বা কোন মানের উপস্থিতি নির্দেশ করে।


৩. Nil এবং T এর মধ্যে পার্থক্য

  • T (True): LISP-এ T সব সময় সত্য (True) হিসেবে ব্যবহার হয়। এটি একটি অবিচলিত মান এবং যেকোনো অবস্থায় এটি সত্য হিসেবে গণ্য হয়।
  • NIL (False or Empty): LISP-এ NIL সব সময় মিথ্যা (False) হিসেবে ব্যবহৃত হয়। এছাড়াও, NIL শূন্যতা বা কোনও মান না থাকা (empty) নির্দেশ করতে ব্যবহৃত হয়। এটি একটি বিশেষ মান যা কেবল মিথ্যা মানই নয়, বরং তালিকা বা অন্যান্য অবজেক্টের জন্য শূন্যতা বা শূন্য মানও প্রতিনিধিত্ব করতে পারে।

সারসংক্ষেপ

  • Boolean Values LISP-এ দুটি প্রধান মান দিয়ে প্রতিনিধিত্ব করা হয়: T (সত্য) এবং NIL (মিথ্যা)। T সবসময় সত্য এবং NIL সবসময় মিথ্যা হিসেবে বিবেচিত হয়।
  • Nil শুধুমাত্র Boolean মানের মতো কাজ করে না, এটি LISP এ শূন্য তালিকা বা কোন মান না থাকা (empty value) নির্দেশ করতে ব্যবহৃত হয়।
  • T এবং NIL প্রোগ্রামিংয়ের শর্ত এবং লজিক্যাল অপারেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ।

এই দুটি ধারণা LISP প্রোগ্রামিং ভাষার কার্যকারিতা এবং নমনীয়তা বাড়াতে গুরুত্বপূর্ণ ভূমিকা পালন করে।

Content added By
Promotion

Are you sure to start over?

Loading...